Pisząc skrypty PowerShell, zauważyłem, że gdy niektóre polecenia cmdlet napotykają problemy, pojawiają się interaktywne monity, których przykładem jest Usuń element z niepustego katalogu. Jest to zabójcze, gdy próbujesz zautomatyzować zadania, wolałbym, żeby akcja po prostu się nie powiodła i albo rzuciła wyjątek, albo zwróciła zły kod powrotu, aby cały skrypt nie był zamknięty, czekając na odpowiedź.
Czy jest jakiś sposób, aby zmusić PowerShell do automatycznego niepowodzenia w przeciwieństwie do proszenia użytkownika o działania?
powershell
Chuu
źródło
źródło
Remove-Item
szybko zawieść?”Odpowiedzi:
Rozwiązanie zaproponowane przez Eris skutecznie uruchamia kolejną instancję PowerShell. Alternatywnym sposobem na to, z prostszą składnią, jest skorzystanie z innej instancji programu powershell.exe.
źródło
Zobacz
Get-Help about_Preference_Variables
:Więc:
źródło
Remove-ADUser
(Serwer 2012R)Ok, to jest naprawdę brzydkie, ale święta musztarda plami to „działa”.
Zagadnienia:
Będzie to działać tylko w przypadku Simple (polecenia, które nie robią wiele rzeczy w bieżącym środowisku). Nie testowałem niczego złożonego
$MyPS = [Powershell]::Create()
$MyPS.Commands.AddCommand("Remove-Item")
$MyPS.Commands.AddParameter("Path", "D:\Temp\t")
$MyPS.Invoke()
Wynik:
źródło
Wszystkie powyższe rozwiązania zawiodły dla mnie, gdy tworzyłem katalog, co oznaczało, że monitowałem o OK dla każdego katalogu, który utworzył mój skrypt - co było dużo. Dla mnie zadziałało | Out-null, aby przesłać wyniki do Out-Null
Zauważ, że $ Directory jest ciągiem z pełną ścieżką do katalogu, który chcesz utworzyć. Mam nadzieję, że to komuś zaoszczędzi trochę czasu: P.
źródło
Proponuję dwie techniki
a) Dołącz
-force
b) Dołącz
-errorAction silently continue
W ten sposób badam, które polecenia cmdlet obsługują dany parametr
źródło
-errorAction SilentlyContinue
to-ea 0
.