powershell - 使用 Powershell 审核权限
问题描述
先介绍一点背景知识:作为 Scrum 团队的一员,我被要求准备一个 Powershell 脚本,该脚本将整理一个 SMB 共享列表,这些共享已被标记为安全,可以从嵌套在给我的 CSV 文件中存档文件夹结构(每个共享等同于一个 CSV 文件,其中包含文件列表,但唯一相关的是它们的标题为 SHARENAME.csv),以及每个共享的当前权限,以防它们需要在以后的日期。
目前,我有以下第一步(很好很容易):
get-childitem -path 'C:\users\adam.lane\desktop\_with adam\_remove' | select BaseName | export-csv -path "..\test.csv"
这给了我一个 CSV 文件,其中包含所有 188 个共享的名称。第二步,为每个人导出一个包含权限列表的 CSV 文件,但进展并不顺利。到目前为止,我有以下内容:
$share = Import-Csv -path 'C:\users\adam.lane\desktop\_with adam\test.csv' -Header 'BaseName'
ForEach ($share in $share) {
get-smbshareaccess -name $share -cimsession euukpopdfs005
}
显然,目前那里没有 export-csv 命令,但基本上我希望脚本使用它调用的相同共享名,并使用“get-smbshareaccess -name”作为 CSV 文件的文件名。不幸的是,此时我遇到了以下格式的 188 个错误:
get-smbshareaccess : euukpopdfs005: No MSFT_SMBShare objects found with property 'Name' equal to '@{BaseName=Brand}'. Verify the value of the property and retry.
At line:3 char:1
+ get-smbshareaccess -name $share -cimsession euukpopdfs005
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (@{BaseName=Brand}:String) [Get-SmbShareAccess], CimJobException
+ FullyQualifiedErrorId : CmdletizationQuery_NotFound_Name,Get-SmbShareAccess
+ PSComputerName : euukpopdfs005
因此,它不是调用 BaseName(例如第一种情况下的“Brand”),而是调用 (@{BaseName=Brand}:String),然后它找不到任何东西。
无论如何我可以整理一下吗?理想情况下,以某种方式适用于 Get-SmbShareAccess 命令和 export-csv 命令,但我不反对根据需要做更多的诡计。
这是我的第一篇文章,如果这篇文章太长、缺乏细节等,我深表歉意。如果您需要其他内容,请告诉我!提前致谢。
建议后的最终(工作)代码:
get-childitem -path 'C:\users\adam.lane\desktop\_with adam\_remove' | select BaseName | export-csv -path "..\test.csv"
$share = Import-Csv -path 'C:\users\adam.lane\desktop\_with adam\test.csv' -Header 'BaseName'
$share | Format-List
ForEach ($item in $share) {
get-smbshareaccess -name $item.BaseName -cimsession euukpopdfs005
}
解决方案
最终工作代码(谢谢大家!):
get-childitem -path 'C:\users\adam.lane\desktop\_with adam\_remove' | select BaseName | export-csv -path "..\test.csv"
$share = Import-Csv -path 'C:\users\adam.lane\desktop\_with adam\test.csv' -Header 'BaseName'
$share | Format-List
ForEach ($item in $share) {
get-smbshareaccess -name $item.BaseName -cimsession euukpopdfs005
}