所以我这里有一个脚本,用于远程获取目录中所有文件的列表以及一些基本信息。
$ a是计算机名称,$b
是文件路径,$d
是输出文件名(预定义),$e
是输出类型。
$script = (invoke-command -ComputerName $a -Credential $cred -ScriptBlock {param($path) get-childitem -Force -literalpath $path} -ArgumentList $b)
switch ($e)
{
json
{
$script | select Name,CreationTime,LastWriteTime,Length,Mode, @{n="Owner";e={(Get-Acl -LiteralPath $_.fullname).owner}} | ConvertTo-Json -Compress | Out-File $outputfilepath\"$d".json
}
csv
{
$script | select Name,CreationTime,LastWriteTime,Length,Mode, @{n="Owner";e={(Get-Acl -LiteralPath $_.fullname).owner}} | ConvertTo-Csv | Out-File $outputfilepath\"$d".csv
}
}
我的问题是Get-ACL返回的“Owner”属性总是返回 null 或“ builtin\administrators
”,而不是实际所有者。当我在本地计算机上运行完全相同的命令(减去所有绒毛)时,它会返回适当的用户作为所有文件的所有者。但是,一旦我使用脚本针对某些东西运行它,所有权数据就会停止正确。
我使用的凭据不应该有任何权限问题,所以我很困惑为什么我没有提取正确的数据。
答案 0 :(得分:0)
我能够通过编辑我的Invoke-Command来解决这个问题,如下所示,将Select语句和Get-ACL移动到块本身
$script = (invoke-command -ComputerName $a -Credential $cred -ScriptBlock {param($path) Get-ChildItem -Force -LiteralPath $path | select Name, CreationTime, LastWriteTime, Length, Mode, @{Label=”Owner”; Expression={(Get-ACL ($path+$_.Name)).Owner}} } -ArgumentList $b)
然后我转换成
$script | ConvertTo-Json -Compress | Out-File $outputfilepath\"$d".json