Skrypt w powershell chce wykorzystać polecenie PSExec do podłaczenia się do zdalnego komputera i wykonania na nim polecenia (tutaj nadania uprawnienia Full Control do dysku X: dla użytkownika user001:
.\PsExec.exe \\comp123 cmd.exe /c 'icacls T:\ /grant:r „user003”:(OI)(CI)F’
Polecenie się wykonuje poprawnie, ale zgłasza błędy:
PsExec.exe : At line:1 char:19 + c:\temp\PsExec.exe <<<< \\comp123 cmd.exe /c 'icacls T:\ /grant:r „user003”:(OI)(CI)F’ + CategoryInfo : NotSpecified: (:String) [], RemoteException + FullyQualifiedErrorId : NativeCommandError PsExec v1.98 – Execute processes remotely Copyright (C) 2001-2010 Mark Russinovich Sysinternals – www.sysinternals.com
processed file: X:\ Successfully processed 1 files; Failed processing 0 files Connecting to comp123…Starting PsExec service on comp123…Connecting with PsExec service on comp123…Starting cmd.exe on comp123… cmd.exe exited on comp123 with error code 0.
Czyli komunikatów o błędach dużo, ale komenda działa poprawnie
Poczytałem i okazało się, że nie tylko ja mam ten problem. Jakimś obejściem jest ukrycie komunikatów o błędzie:
$tmp=$ErrorActionPreference
$ErrorActionPreference = „SilentlyContinue”
.\PsExec.exe \\comp123 cmd.exe /c 'icacls T:\ /grant:r „user003”:(OI)(CI)F’
$ErrorActionPreference=$tmp
Zmienna $ErrorActionPreference mówi jak zachować się w przypadku napotkania błędu. Skrypt może się przerwać, ale może też kontynuować… kontynuacja może być cicha lub z komunikatami n ekranie. Tutaj powiedzieliśmy, że w przypadku fałszywych błędów PSExec należy kontynuować i ukryć błędy. Żeby nie zaburzyć logoki skryptu, która może korzysta gdzieś dalej z tej zmiennej przed modyfikacją, zapamiętujemy aktualną wartość zmiennej, a na końcu przywracamy ją do pierwotnej wartości.
Komentarze:
PowerShell ma swoje narzędzia do remotingu – na przykład Invoke-Command (które pozwala uruchamiać polecenia na wielu maszynach naraz), *-PSSession, PowerShell workflows.
PSExec to przestarzałe rozwiązanie dla starego cmd.exe 🙂
tak, ale nie na każdym serwerze, do którego chcesz sięgnąć remiting jest włączony. Ten przypadek właśnie taki był. Gdyby nie to na pewno skorzystałbym z remotingu, bo jest boski!