带有调用命令的 PowerShell 脚本卡在特定计算机上

PowerShell-script with invoke-command gets stuck on specific computers

我正在编写一个 PowerShell 脚本,它从所有 AD 服务器读取所有共享并将它们输出到一个 csv 文件中。同时,脚本会保存所有发生的错误并将它们输出到错误日志中。该脚本将 运行 作为每周任务。 当我 运行 脚本时,一切顺利,直到它到达一个特定的服务器,它才会无限加载。 AD 服务器 (Windows Server_2012_R2) 位于普通 OU 内,此 OU 中的其他服务器工作正常。

我相信还有其他一些问题也会发生,但我不确定具体有多少(大约 150 分之一)。

它不会产生错误。

你知道这里的问题是什么吗?

代码:


$ErrorActionPreference = 'Continue'

$computers = (Get-Content C:\PowerShell\Shares\serverlist.txt).ForEach({
    if(-not [string]::IsNullOrWhiteSpace($_))
    {
        "$_.domain.com"
    }
})

$remoteCode = {
    Get-SmbShare | Where-Object Path | Get-Acl |
    Select-Object -Property "PSChildName", "Path", "Group", "AccessToString"
}

$results = Invoke-Command -ComputerName $computers -ScriptBlock $remoteCode 2>&1
$errors, $good = $results.Where({$_ -is [System.Management.Automation.ErrorRecord]}, 'Split')

$good | Sort-Object PSComputerName | Select-Object "PSComputerName", "PSChildName", "Path", "Group", @{ Name = "AccessToString"; Expression = { $_.AccessToString -replace("268435456", "FullControl") -replace("-1610612736", "ReadAndExecute")}} | export-csv -path C:\PowerShell\Shares\shares.csv -NoTypeInformation -delimiter ";"

$errors.Exception.Message | Set-Content $error_logfile -Encoding Unicode

好的,我现在找到问题了。两台服务器冻结并导致永无止境的 PowerShell 脚本。现在我想我将配置某种超时,你们中有人知道我如何以最好的方式做到这一点吗? 谢谢大家的帮助。