Get-ACL 使用调用命令返回空值

Get-ACL Returning Null Values with Invoke-Command

所以我这里有一个脚本,用于远程获取目录中所有文件的列表以及一些基本信息。

$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”,而不是实际所有者。当我在我的本地机器上 运行 完全相同的命令(减去所有的绒毛)时,它 returns 正确的用户作为所有文件的所有者。但是,一旦我使用该脚本 运行 它针对远程对象,所有权数据就不再正确了。

我使用的凭据不应该有任何权限问题,所以我很困惑为什么我没有提取正确的数据。

我能够通过编辑我的 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