FYI, удаленное взаимодействие через WinRM через IP, требует установки значения параметра -credential
. (Сделайте это с $admin = Get-Credential
и используйте -credential $admin
в качестве параметра в команде invoke). Вы не можете удаленно через ip использовать ваши текущие учетные данные. Также, при использовании команды invoke, я НАСТОЯТЕЛЬНО рекомендую использовать -sessionoption (new-pssessionoption -nomachineprofile)
, иначе вы создаете профили на каждой машине, что не только занимает больше времени, но и оставляет огромные следы вашей работы.
например. (используется ответ Nas)
$admin = Get-Credential
$remoteIP = 'x.x.x.x'
Invoke-Command -ComputerName $remoteIP -credential $admin -sessionoption (new-pssessionoption -nomachineprofile) -ScriptBlock {
$env:COMPUTERNAME
Get-Date
}
если вы хотите использовать тонну машин, вы можете сделать это ...
$admin = Get-Credential
$remoteIP = "x.x.x.x","x.x.x.x"
foreach ($pc in $remoteIP) {
Invoke-Command -ComputerName $pc -credential $admin -sessionoption (new-pssessionoption -nomachineprofile) -ScriptBlock {
[pscustomobject][ordered]@{'Hostname'=$env:COMPUTERNAME
'Date'=Get-Date}
}
}
чтобы ускорить его, я бы удалил "env: computername", так как в любом случае он должен был бы вернуть pscomputername
это должно быть намного быстрее
$remoteIP = "x.x.x.x","x.x.x.x"
foreach ($pc in $remoteIP) {
$object = Get-WmiObject -Class win32_operatingsystem -ComputerName $pc -Property localdatetime,__server
[pscustomobject][ordered]@{'computername'=$object.__server
'Date'=$object.converttodatetime($object.localdatetime)}
}
__ Сервер - это ДВА подчеркивания, чем слово сервер. НЕ _Сервер, а __Сервер
[pscustomobject] - это сокращение от new-object -typename psobject -property ...
и [заказанный] просто гарантирует сохранение вашего порядка хеш-таблиц.