- Invoke-Command
- Использование shutdown.exe для удаленной перезагрузки компьютера
- Параметры
- -AllowRedirection
- -ApplicationName
- -AsJob
- Перезагрузка удаленного компьютера помощью Invoke-CimMethod
- Описание
- Перезагрузка удаленного компьютера с помощью командлета Restart-Computer
- Удаленное выполнение PowerShell с помощью Invoke-Command
- Удаленная перезагрузка компьютера с помощью PSExec.exe
- Теперь расходы на сертификацию кабельных систем станут меньше на 65%!
Invoke-Command
Если вы не хотите использовать pssessions, вы также можете использовать Invoke-Command на удаленном компьютере. Вы уже пытаетесь сделать это с помощью последних нескольких строк кода.
Invoke-Command -ComputerName $ computer -ScriptBlock {Start-Process «bagel.exe»}
Если вы пойдете по этому пути, выясните проблемы и посмотрите, как передать аргументы блоку сценария.
Не уверен, почему ты не работаешь. Может быть, у вас есть какие-то ошибки, которые подавляются? Я бы попробовал что-нибудь попроще потестить. Ваш графический интерфейс — ваше приложение? Может не работать при запуске. Попробуйте что-нибудь вроде ipconfig и посмотрите, каков результат.
Я бы также рассмотрел цикл while с условием тайм-аута, ожидая завершения / запуска процесса на удаленном компьютере. То есть вы можете лучше объяснить ошибку, чем предполагать, что 10 секунд достаточно.
Я думаю, у вас проблемы с локальным / удаленным выполнением.
(Get-WmiObject win32_process -ComputerName $ computer -Credential $ mycreds |? {$ _. ProcessName -match «Workbench3.helper»}). Завершить()
Над строкой возвращаются все процессы с удаленного компьютера на локальный. Затем вы группируете возвращенные объекты процесса на своем локальном компьютере и вызываете Terminate () на своем локальном компьютере. Вместо этого я предлагаю вам использовать следующую строку:
Invoke-command -session $ pers -ScriptBlock {(Get-WmiObject win32_process -ComputerName $ computer -Credential $ mycreds |? {$ _. ProcessName -like «* Workbench3.helper *»}). Завершить()}
Это должно завершить процесс Workbench3. Я использовал оператор Like, чтобы сделать фильтрацию менее жесткой.
Позже вы можете повторно использовать сеанс, сохраненный в $ pers, для перезапуска процесса.
Invoke-command -session $ pers -ScriptBlock {Start-Process -filepath «C: Program Files (x86) Company Security Workbench3 Helper WorkBench3.Helper.exe» -Wait }
Я также использовал переключатель -Wait. Переключатель заставил Start-Process ждать запуска программы (а затем вернуться).
При выполнении удаленных операций я всегда предлагаю выполнять эти операции с помощью Invoke-Command, а не с помощью параметров -ComputerName различных команд. Invoke-Command использует WS-MAN через HTTP (S), и удаленная реализация команд, которые предлагают параметр -ComputerName, отличается от реализации командлета командлета. Это преимущество команды invoke упрощает настройку, например, межсетевых экранов.
Надеюсь, это поможет.
ответил 2017-01-07T16: 45: 00 + 03: 00 4 года, 9 месяцев назад
Moerwald добавить комментарий пожаловаться 46
Спасибо за вашу помощь! Итак, именно здесь я понял, что пытался сделать, что вы думаете?
$ mycreds = Get-Credential
$ computer = Read-Host -prompt «Введите имя компьютера»
$ s = New-PSSession -ComputerName $ computer -Credential $ mycreds
#### Завершить процесс поддержки Workbench ####
Invoke-command -ScriptBlock {(Get-WmiObject win32_process -ComputerName $ computer -Credential $ mycreds |? {$ _. ProcessName -like «* Workbench3.helper *»}). Конец()}
################# Запуск помощника Workbench Helper #####################
Invoke-Command $ s {$ run = (Get-Date) .AddMinutes (1) Register-ScheduledTask -TaskName «ZZ_Start WorkBench Helper» -User «domain user» -InputObject (
(
Новое запланированное мероприятие — Действие (
New-ScheduledTaskAction — Запустите «C: Program Files (x86) Company Security Workbench3 Helper WorkBench3.Helper.exe» -Argument (
» »
)
) -Курок (
New-ScheduledTaskTrigger -Once -At ($ run.TimeOfDay.ToString («hh : mm»)) # То же, что и «TimeOfDay», чтобы получить 24-часовой формат
) -Настройки (
New-ScheduledTaskSettingsSet -DeleteExpiredTaskAfter 00:00:01 #
)
) | % {$ _.Trigger 0 .EndBoundary = $ run.AddMinutes (1) .ToString (‘s’); $ _ }
)
}
тSi prega di inserire almeno 50 caratteri
Использование shutdown.exe для удаленной перезагрузки компьютера
Divaghiamo dai cmdlet di PowerShell e passiamo all’eseguibile standard integrato che Windows offre per riavviare il sistema: shutdown.exe.
shutdown.exe / m computer remoto / r / t 5
- r — indica che il computer deve essere riavviato, non spento.
- e — consente di documentare il motivo del riavvio
- t — tempo in secondi prima del riavvio
- c — un messaggio di riavvio facoltativo che verrà visualizzato sullo schermo prima dell’arresto, nonché nel commento del registro eventi di Windows e può contenere fino a 512 caratteri
- f — chiude forzatamente tutte le applicazioni in esecuzione, garantisce un riavvio anche se il computer è occupato con qualsiasi processo
Параметры
-AllowRedirection
Consente il reindirizzamento di questa connessione a un URI alternativo.
Quando si utilizza il parametro ConnectionURI, l’host remoto può restituire un’istruzione che reindirizza a un URI diverso. Per impostazione predefinita, Windows PowerShell non reindirizza le connessioni, ma è possibile utilizzare il parametro AllowRedirection per consentire il reindirizzamento della connessione.
È inoltre possibile limitare il numero di reindirizzamenti della connessione impostando la proprietà MaximumConnectionRedirectionCount sulla variabile di preferenza $ PSSessionOption o la proprietà MaximumConnectionRedirectionCount sul valore del parametro SessionOption. Il valore predefinito è 5. Per ulteriori informazioni, vedere la descrizione del parametro SessionOption e l’argomento della Guida per il cmdlet New-PSSessionOption.
Necessariamente? | falso |
Posizione? | di nome |
Valore predefinito | |
Accettare l’input della pipeline? | falso |
Accetta i caratteri jolly? | falso |
-ApplicationName
Specifica il segmento del nome dell’applicazione nell’URI di connessione. Utilizzare questo parametro per specificare il nome dell’applicazione se il comando non utilizza il parametro ConnectionURI.
Il valore predefinito è il valore della variabile di preferenza $ PSSessionApplicationName nel computer locale. Se questa variabile di preferenza non è definita, viene utilizzato il valore predefinito «WSMAN». Questo valore è adatto per la maggior parte dei casi. Per ulteriori informazioni, vedere about_Preference_Variables.
Il servizio WinRM utilizza il nome dell’applicazione per selezionare un listener per soddisfare la richiesta di connessione. Il valore di questo parametro deve corrispondere al valore della proprietà URLPrefix del listener sul computer remoto.
Necessariamente? | falso |
Posizione? | di nome |
Valore predefinito | WSMAN |
Accettare l’input della pipeline? | vero (PerNomeProprietà) |
Accetta i caratteri jolly? | falso |
-AsJob
Esegue un comando come processo in background su un computer remoto. Utilizzare questo parametro per eseguire comandi il cui completamento richiede molto tempo.
Quando si utilizza il parametro AsJob, il comando restituisce un oggetto che rappresenta il lavoro, quindi viene visualizzata la riga di comando. Puoi continuare a lavorare in questa sessione mentre il lavoro viene completato. Utilizzare i cmdlet Job per gestire il processo. Utilizzare il cmdlet Receive-Job per ottenere i risultati del processo.
L’utilizzo del parametro AsJob è simile all’utilizzo di Invoke-Command per eseguire in remoto il comando Start-Job. Tuttavia, quando si utilizza AsJob, il processo viene creato sul computer locale, sebbene venga eseguito sul computer remoto, ei risultati del processo remoto vengono automaticamente restituiti al computer locale.
Per ulteriori informazioni sui processi in background in Windows PowerShell, vedere about_Jobs e about_Remote_Jobs.
Necessariamente? | falso |
Posizione? | di nome |
Valore predefinito | no |
Accettare l’input della pipeline? | falso |
Accetta i caratteri jolly? | falso |
Перезагрузка удаленного компьютера помощью Invoke-CimMethod
Non specificamente progettato per il riavvio del sistema remoto.
Invoke-CimMethod funziona utilizzando il metodo WIM per riavviare il sistema remoto.
Non è flessibile come il cmdlet Restart-Computer, ma puoi riavviare il sistema in remoto usando il tuo comando PowerShell.
Invoke-CimMethod -ComputerName $ ComputerName -ClassName ‘Win32_OperatingSystem’ -MethodName ‘Reboot’
- ClassName — Il nome della classe CIM utilizzata. Nel caso del comando di riavvio, utilizziamo la classe Win32_OperatingSystem.
- ComputerName: utilizzando il protocollo WsMan, è possibile utilizzare uno dei seguenti tipi di indirizzi remoti: NetBIOS, indirizzo IP o nome di dominio completo.
- MethodName: il nome del metodo è il metodo WMI per la classe di destinazione. In caso di riavvio, sarà necessario utilizzare il metodo Reboot.
Описание
Il cmdlet Invoke-Command esegue i comandi sul computer locale o remoto e restituisce tutto l’output dei comandi, inclusi gli errori. Con un singolo Invoke-Command, puoi eseguire comandi su più computer.
Utilizzare il parametro ComputerName per eseguire un singolo comando su un computer remoto. Per eseguire una serie di comandi che condividono dati, creare una sessione PSSession (connessione permanente) sul computer remoto e utilizzare il parametro Session del cmdlet Invoke-Command per eseguire il comando all’interno della sessione PSSession.
Puoi anche utilizzare Invoke-Command sul tuo computer locale per analizzare o eseguire una riga o un blocco di script come comando. Windows PowerShell converte il blocco di script in un comando ed esegue immediatamente tale comando all’interno della sessione corrente, invece di visualizzare il testo della riga al prompt dei comandi.
Prima di utilizzare Invoke-Command per eseguire comandi su un computer remoto, vedere about_Remote.
Перезагрузка удаленного компьютера с помощью командлета Restart-Computer
Il primo e più comune metodo specifico di PowerShell è il cmdlet Restart-Computer. Questo cmdlet è facile da usare con opzioni flessibili, alcune delle quali semplificano l’integrazione degli script.
Come puoi vedere nell’esempio seguente, questo è generalmente il metodo più semplice e una soluzione adatta per la maggior parte degli script PowerShell.
Riavvia-Computer -NomeComputer $ NomeComputer -Forza
- ComputerName — Il sistema che stai per riavviare. Questo parametro può accettare i seguenti indirizzi di rete: NetBIOS, indirizzo IP o nome di dominio completo. Questo parametro non deve essere utilizzato per l’utilizzo su un sistema locale.
- Forza: utilizzato se altri utenti sono attualmente connessi al sistema. Questa opzione ti permetterà di riavviare il tuo PC in ogni caso, anche se è occupato da qualsiasi processo.
- Attendi: interrompe il flusso di lavoro fino al riavvio del computer remoto
- Timeout: utilizzato con il parametro Wait, garantisce che il riavvio non blocchi la richiesta e l’elaborazione indefinitamente in caso di problemi.
- Ritardo: per impostazione predefinita, il cmdlet esegue il polling di un componente specifico per la convalida ogni 5 secondi, in attesa che il sistema remoto diventi disponibile. Questa opzione sovrascrive questo periodo di ritardo.
Удаленное выполнение PowerShell с помощью Invoke-Command
Il cmdlet Invoke-Command consente di eseguire un comando su uno o più computer remoti.
Ad esempio, per eseguire un singolo comando su un computer remoto, puoi utilizzare un comando come questo:
Invoke-Command -ComputerName dc01 -ScriptBlock {$ PSVersionTable.PSVersion}
Questo comando stamperà sulla tua console il valore della versione di PowerShell installata nel computer remoto indicato nel parametro -ComputerName. Il blocco -ScriptBlock {cmdlet} specifica il comando da eseguire sul computer remoto.
Per impostazione predefinita, il comando inviato tramite Invoke-Command viene eseguito sul computer remoto dall’utente corrente. Se vuoi eseguire il comando come utente diverso, devi prima richiedere le credenziali dell’utente e memorizzarle in una variabile:
$ cred = Get-Credential
Invoke-Command -ComputerName comp-buh2 -Credential $ cred -ScriptBlock {Get-NetAdapter}
Questo comando PowerShell elencherà le interfacce di rete sul computer remoto:
È possibile specificare più comandi in uno ScriptBlock, separati da punto e virgola. Ad esempio, il seguente comando stamperà il fuso orario corrente e lo cambierà in un altro:
Invoke-Command -Computername dc01 -ScriptBlock {Get-TimeZone | selezionare DisplayName; Set-TimeZone -Name «Astrakhan Standard Time”}
Invoke-Command consente di eseguire non solo singoli comandi, ma anche script PowerShell. Questo viene fatto usando l’argomento -FilePath (invece di -ScriptBlock). In questo caso, specifica il percorso del file di script PS1 locale sul tuo computer (non è necessario copiare il file di script sul computer remoto):
Invoke-Command -ComputerName Server01 -FilePath c: PS Scripts GetComputerInfo.ps1
Удаленная перезагрузка компьютера с помощью PSExec.exe
Una delle utilità più comunemente utilizzate nella casella degli strumenti di Sysinternals è psexec.exe. Offre diverse funzionalità uniche che semplificano l’interazione con un sistema remoto. Utilizzando un approccio diverso rispetto a PowerShell e alle utilità integrate, psexec.exe crea un servizio sul sistema remoto attraverso il quale vengono passati i comandi.
psexec.exe -d -h remotecomputer «shutdown.exe / r / t 0 / f»
- d — Utilizzare psexec in modo non interattivo, senza attendere il completamento del processo.
- h — Se il sistema di destinazione è Vista o versione successiva, avviare questo processo utilizzando il token con privilegi elevati.
- n — specifica il timeout in secondi quando ci si connette a un computer remoto
Теперь расходы на сертификацию кабельных систем станут меньше на 65%!
Ora il costo della certificazione dei sistemi di cablaggio sarà ridotto del 65%!