首页 > 解决方案 > 使用 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
}

标签: powershellcsv

解决方案


最终工作代码(谢谢大家!):

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
}

推荐阅读