我需要创建一个脚本来遍历用户samaccountnames列表,并识别与网络上的samaccountname匹配的网络目录。它似乎不起作用。网络上的用户主文件夹在路径中使用其samaccountname。以下是我到目前为止的情况:
$userList = "C:\Users\sfp01\My
Documents\Data_Deletion_Testing\User_SamAccountName.csv"
$userDirectory = foreach ($user in $userList)
{
Get-ChildItem -Path "\\ceoii\" -Directory -Recurse | ? {}
}
Export-Csv -Path "C:\Users\sfp01\My
Documents\Data_Deletion_Testing\User_Directory.csv"
答案 0 :(得分:0)
首先,您需要导入csv作为第一行,只需将文件的位置保存在变量中,而不是文件的内容中。
其次,您没有提供包含用户saMAccountName的csv文件的列名。您需要设置Where-Object
以使用该信息进行过滤。我在saMAccountName上使用-match
,但请对其进行编辑以反映您的要求。
我不认为\\servername\
不是有效的共享名称,它应该是像\\servername\share\
这样的共享。如果你想从服务器获取所有共享,你可以用它来枚举它们像这样invoke-command -ComputerName ceoii -ScriptBlock {Get-SmbShare}
您可能还想只提取一次文件夹列表,然后为每个用户进行过滤。
最后,您将信息保存在$userDirectory
中,以便将这些信息传输到export-csv
。
$userList = Import-CSV 'C:\Users\sfp01\My Documents\Data_Deletion_Testing\User_SamAccountName.csv'
$folders = Get-ChildItem -Path "\\ceoii\sharename" -Directory -Recurse
$userDirectory = foreach ($user in $userList) {
$folders | Where-Object {$_.name -match $user.saMAcountName}
}
$userDirectory | Export-Csv -Path 'C:\Users\sfp01\My Documents\Data_Deletion_Testing\User_Directory.csv'
如果你知道文件夹名称完全匹配,那么使用-in
或-contains
会更有效率。
$folders = Get-ChildItem -Path "\\ceoii\sharename" -Directory -Recurse
$userList = Import-CSV 'C:\Users\sfp01\My Documents\Data_Deletion_Testing\User_SamAccountName.csv' |
Select-Object -ExpandProperty saMAccountName
$folders |
Where-Object {$_.name -in $userList} |
Export-Csv -Path 'C:\Users\sfp01\My Documents\Data_Deletion_Testing\User_Directory.csv'