AD と在庫管理ツールとの不一致があるため、システムを調整しようとしています。大量の PC (~500) にリモート接続する必要があります。ログインしているユーザーがいない場合にコンピューターにリモート接続する GUI/スクリプトを作成しようとしています。それぞれが失敗するのに長い時間がかかります。リスト内のすべてのコンピューターに対してジョブを開始しようとしていますが、mstsc
ログインしているユーザーがいない場合にのみ起動します。
#Clear previous jobs
Get-Job | Remove-Job
$computers = $richtextbox1.Text.Split("`n") | % { $_.trim() }
foreach ($computer in $computers) {
if ($computer -ne "") {
Start-Job -ScriptBlock {
if (Test-Connection -ComputerName $args[0] -Count 1) {
$uname = ""
$uname = Get-WmiObject -Class Win32_Computersystem -ComputerName $args[0] |
Select-Object -Expand UserName
if ($uname -like "") {
C:\Windows\System32\mstsc.exe /v:$args /h:768 /w:1024
# At this point the mstsc box would pop up, and the job
# can be killed if possible
}
}
} -ArgumentList $computer
}
}
外すif ($uname -like "")
と起動しmstsc
ます。もう1つの問題は、60台のコンピューターのブロックに対してこれを行うと、mstsc
〜6台のコンピューターが起動し、約45秒待ってからさらに2、3のウィンドウを開くことです(約10台のコンピューターしか存在しませんでした)。ジョブの実行中に時間がかかりすぎるという問題があるのではないでしょうか? 実行に時間がかかりすぎる場合、ジョブをキャンセルする最善の方法は何ですか?
$args
問題が/に関連しているかどうかはわかりません$args[0]
。過去にジョブを操作するときは、 を使用する必要がありました$args[0]
。また、これにより、Windows 10 でログオンしているユーザーを取得すると、一貫性のない結果が生じる可能性があることもわかっているため、より良いオプションがあれば、それは役に立ちます。