Come configurare smartphone e PC. Portale informativo
  • casa
  • Windows Phone
  • Controllo remoto tramite cmd. Disinstallazione remota di programmi tramite WMI

Controllo remoto tramite cmd. Disinstallazione remota di programmi tramite WMI

Ciao, cari lettori! Alcuni di voi potrebbero essersi chiesti come rimuovere un programma su un computer remoto. Molto probabilmente non ne ha bisogno l'utente medio, ma qualche amministratore di sistema rete locale questo potrebbe essere necessario.

Esistono molti modi per rimuovere e installare software su computer remoti. varie soluzioni e software. In questo articolo vedremo la soluzione questa edizione basato sugli strumenti Windows integrati.

Ci aiuterà a rimuovere i programmi su macchine remote Strumentazione di gestione Windows o più semplicemente detto WMI. Tradotto in russo questo è Strumentazione di gestione Windows.

Come avviare WMI

Wmi viene avviato dalla riga di comando. Potete aprire la riga di comando da "Start -> Tutti i programmi -> Accessori -> Prompt dei comandi", oppure semplicemente premere i tasti "WIN+R", si aprirà la finestra "Esegui" in cui nel campo "apri" digitare " cmd" e fare clic su "OK" ".

Nella finestra della riga di comando che si apre, digita il comando wmic e premi "Invio":

Pertanto, abbiamo lanciato un'utilità console per interagire con la struttura WMI su un computer locale o remoto. Ora utilizzando il linguaggio di query Linguaggio di interrogazione WMI(WQL) può essere fatto vari comandi WMI.

Ad esempio, otteniamo tutto elenco del software installato sul computer remoto. Per fare ciò, esegui la seguente query:

/node:(nome computer) nome del prodotto

Dove al posto di (nome computer) sostituiamo il nome della macchina remota e locale da cui dobbiamo ottenere l'elenco dei programmi installati. È preferibile racchiudere il nome del computer tra virgolette. Premi "Invio", attendi un po' di tempo per raccogliere le informazioni e ottieni qualcosa di simile alla seguente immagine:

Come disinstallare un programma utilizzando WMI?

È possibile rimuovere il programma utilizzando la seguente richiesta:

/node:(nome computer) prodotto dove nome=(nome programma) chiama disinstallazione

Dove al posto di (nome computer) inseriamo il nome del computer da cui verrà rimosso il programma, e al posto di (nome programma) il nome del programma da rimuovere come nell'elenco dei software risultante.

Ad esempio, dobbiamo rimuovere " Microsoft Office Professionale Plus 2010". Quindi la richiesta sarà simile a questa:

/node:(home2) prodotto dove nome="Microsoft Office Professional Plus 2010" chiama disinstallazione

Premere "Invio" e rispondere alla richiesta di un'offerta per rimuovere il programma Y:

wmic:root\cli>/node:"tep-ws000010" prodotto dove nome="Microsoft Office Professional Plus 2010" chiama disinstallazione
Esegui (\\TEP-WS000010\ROOT\CIMV2:Win32_Product.IdentifyingNumber="(90140000-0011—0000-1000-0000000FF1CE)",Name="Microsoft Office Professional Plus 2010",Version="14.0.4763.1000") -> Disinstallare() (S/N/?)? Y

Dopo aver tentato di eliminare, verrà visualizzato un messaggio che informa dei risultati. Se la cancellazione ha esito positivo, il messaggio sarà simile al seguente:

Esecuzione del metodo riuscita.
Parametri di uscita:
istanza di __PARAMETERS
{
ValoreRitorno = 0;
};

È tutto! Ci vediamo nei prossimi numeri!

Oggi anche per i cani ha inventato il telecomando .


Tornando alla serie Note dell'amministratore, vorrei parlare delle opzioni per avviare programmi eseguibili su computer remoti. Questo articolo interesserà coloro che non dispongono ancora di sistemi gestione centralizzata, ma si comprende già la noiosità della scansione manuale di workstation e server. Oppure per chi non è interessato a soluzioni chiavi in ​​mano per mancanza di sportività.


Come esempio del motivo per cui è necessario un simile lancio di programmi, possiamo citare la recente isteria con Petya\Not-Petya, quando tutti si sono precipitati a controllare\disabilitare SMBv1 e scaricare gli aggiornamenti. Sì, e puoi anche fare l'inventario o installare una patch urgente utilizzando questo metodo.


Una volta trovai lavoro in un'organizzazione durante l'epidemia di Kido\Conficker. Maggior parte in modo semplice per scoprire se tutto andava bene nell'IP dell'azienda, c'era una simpatica utility di Kaspersky chiamata Kido Killer, che controllava la presenza di un virus e lo eliminava. Esegui il programma un buon centinaio Non era divertente usare le macchine manuali, quindi ho dovuto familiarizzare con l'automazione.

Se nei sistemi operativi *nix, SSH viene solitamente utilizzato per l'avvio remoto, in Windows i metodi per avviare programmi e script sono davvero come la sabbia nel deserto. Analizzerò le opzioni principali, sia conosciute che esotiche. Non toccherò cose così ovvie come il server telnet, soprattutto perché Microsoft lo ha già rimosso dai moderni sistemi operativi.

Metodi vecchi e collaudati nel tempo

Psexec

Questa è probabilmente la prima cosa che mi viene in mente quando stiamo parlando sull'avvio remoto dei programmi. L'utilità di Mark Russinovich è stata utilizzata fin dai tempi di Windows NT ed è utilizzata ancora oggi. Oltre alla funzione principale, puoi usarlo sia come Runas che per avviare programmi in una sessione utente server terminale. Psexec consente inoltre di impostare i core del processore su cui verrà eseguito il programma e la sua priorità nel sistema.


Ad esempio, vediamo se l'aggiornamento che chiude la famigerata vulnerabilità SMB è installato su un elenco di computer:


psexec @computers.txt /u UTENTE /p PASS cmd.exe /v /c ""systeminfo | trova "KB4012212" || echo !nomecomputer! >> \\server\condivisione\log.txt"""

Il file computers.txt contiene un elenco di computer. Per eseguire l'intero dominio, è possibile utilizzare \\*. I nomi delle workstation o dei server verranno visualizzati nel file \\server\share\log.txt senza aggiornamento. Se nel dominio sono presenti computer con *nix integrato o non è possibile accedere a una risorsa di rete amministrativa Amministratore$- il comando non verrà eseguito su questa macchina, ma l'elaborazione continuerà. Per evitare che lo script si blocchi ogni volta che provi a connetterti, puoi impostare un timeout utilizzando la chiave -N.


Se il computer è spento, non lo sapremo. Pertanto, è meglio verificare in anticipo la disponibilità delle macchine o raccogliere informazioni sul successo o sul fallimento in un file.


Passiamo ai contro Psexec Ciò può essere attribuito al fatto che, per la sua praticità e popolarità, viene spesso utilizzato dagli autori di virus. Ecco perché sistemi antivirus può rilevare l'utilità come una minaccia di tipo amministratore remoto.


Per impostazione predefinita, il processo sul computer remoto viene eseguito come utente che esegue Psexec. Se necessario, il login e la password possono essere impostati esplicitamente oppure è possibile utilizzare l'account SYSTEM.

WMIC

Per gestire i sistemi Windows tramite diverse utilità grafiche, viene spesso utilizzato WMI (Windows Management Instrumentation), un'implementazione dello standard di gestione orientato agli oggetti WBEM. Come utilità con interfaccia grafica per lavorare con WMI è possibile utilizzare wbemtest.exe.


Creato per funzionare con WMI dalla console wmic.exe. Ad esempio, per controllare gli aggiornamenti installati, invece del design inquietante dell'esempio precedente, puoi utilizzare comando semplice:


wmic /node:"nomeserver" qfe get hotfixid | trova "KB4012212"

Puoi anche utilizzare l'elenco dei computer utilizzando il comando /node:"@computers.txt".


Puoi anche eseguire programmi utilizzando WMI: la sintassi è estremamente semplice:


wmic /node: chiamata al processo "nomeserver" crea "cmd /c alcunicomandi"

Sfortunatamente, a differenza di Psexec, non sarai in grado di ottenere l'output nella console: dovrai generare i risultati del comando in un file.


Per impostazione predefinita, il processo sul computer remoto viene eseguito come utente che esegue wmic. Se necessario, il login e la password possono essere specificati esplicitamente.

Criteri e script di gruppo

Se le opzioni precedenti non richiedevano un ambiente di dominio, in questo caso sarà richiesto un dominio. Gli script sono supportati quando l'utente accede e esce dal sistema, nonché quando il sistema viene acceso e spento. Poiché tutti Amministratore di Windows Li ho incontrati, non descriverò in dettaglio come usarli, ti ricorderò solo dove cercarli.



Script eseguiti all'avvio e allo spegnimento del sistema.



Script che vengono eseguiti quando l'utente accede e esce dal sistema.


Gli script configurati nella sezione utente vengono eseguiti per conto dell'utente e nella sezione computer con l'account SYSTEM.

Compiti assegnati

Abbastanza modo interessante, meritando il diritto alla vita. Le attività pianificate possono essere create dalla riga di comando utilizzando l'utilità schtasks.exe, eseguili, quindi eliminali. Maggiori dettagli sulla sintassi possono essere trovati nella documentazione, ma esaminerò un esempio di utilizzo delle attività pianificate in un ambiente di dominio. Diciamo che dobbiamo eseguire un comando il più rapidamente possibile, indipendentemente dal fatto che il computer sia spento o meno. A questo scopo vengono utilizzate le cosiddette Preferenze di Criteri di gruppo.


Dovresti cercare l'impostazione delle attività pianificate nel computer o nella configurazione dell'utente - "Impostazioni - Impostazioni del Pannello di controllo - Attività pianificate".



Crea una nuova attività pianificata.


Per eseguire un comando o uno script ASAP, dovrai creare un'"Attività immediata (Windows 7 e versioni successive)". Se all'improvviso nell'infrastruttura rimangono macchine con Windows XP, sarà sufficiente "Attività successiva (Windows XP)".


Vale la pena creare diverse policy con i corrispondenti filtri WMI o creare due diverse attività pianificate in una policy con targeting, ad esempio utilizzando lo stesso filtro WMI. Ciò contribuirà a evitare conflitti in un ambiente eterogeneo con Windows vecchio e nuovo.


Un esempio di filtro WMI per applicare un criterio solo su computer con Windows XP:


SELEZIONA * FROM Win32_OperatingSystem WHERE Versione COME "5.1%" AND ProductType = "1"

Altrimenti, la procedura per creare un'attività pianificata è banale. L'unica cosa è non dimenticare di selezionare l'opzione "Applica una volta e non riapplicare" se l'attività non richiede una nuova esecuzione.



Eseguiamo l'attività immediata solo una volta.


Quando si utilizzano tali attività pianificate, il programma verrà avviato non appena il computer riceve l'aggiornamento politica di gruppo. Questo è comodo: non è necessario verificare la disponibilità dei computer nel caso di Psexec e wmic e forzare gli utenti a riavviare le macchine, come nel caso degli script di criteri di gruppo. Se necessario è possibile copiare localmente il file script nella sezione “Impostazioni - Configurazione di Windows- File.


Le attività pianificate consentono di impostare esplicitamente il nome utente per eseguire il programma, incluso per SYSTEM.

Tramite il registro

La modifica del registro sui computer degli utenti è un'opzione strana, solo in caso di emergenza. È possibile utilizzare i rami Run o RunOnce. Maggiori informazioni su di essi nella documentazione. La modifica del registro stessa può essere eseguita tramite criteri di gruppo o dalla riga di comando, ad esempio con il seguente comando:


reg add \\COMPUTER\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v script /t Reg_SZ /d "script.cmd"

A seconda del ramo del registro, il processo verrà eseguito con l'utente che ha effettuato l'accesso o con l'account SYSTEM.


Esistono altri modi, ad esempio modificare i collegamenti nella cartella Esecuzione automatica o aggiungere un collegamento a programma popolare && script.cmd, ma questi metodi appartengono già alla serie “possibile, ma non necessaria”.


Passiamo ora ai nuovi strumenti.

Nuovi metodi o dove senza PowerShell

Fedele al suo nome, PowerShell può connettersi a computer remoti utilizzando WMI, RPC e WS-Management (WSMan). L'utilizzo di quest'ultimo metodo richiede una configurazione preliminare.


I cmdlet che non richiedono la preconfigurazione in genere dispongono di un parametro ComputerName ma non di un parametro Session. È possibile visualizzare un elenco di tali cmdlet con il comando:


Ottieni comando | dove ( $_.parameters.keys -contains "NomeComputer" -e $_.parameters.keys -notcontains "Sessione")

Per configurare WSMan, in generale, basta eseguire il comando Abilita-PSRemoting-Forza. Inizierà il servizio telecomando WinRM scriverà eccezioni nel firewall: in linea di principio, ciò può essere fatto per l'intero dominio utilizzando i criteri di gruppo. La configurazione è descritta più dettagliatamente nella documentazione.


Una volta che tutti i computer sono pronti ad accettare le richieste, possiamo connetterci utilizzando i cmdlet di PowerShell appropriati. Per verificare la connettività, utilizzare il cmdlet Prova-WSMan.



Verifica della connettività.


Per eseguire un comando o uno script specifico, viene utilizzato un cmdlet Invoca-Comando con la seguente sintassi:


Invoke-Command -ComputerName COMPUTER -ScriptBlock (COMANDO) -credential USERNAME

Dove COMPUTER è il nome del computer, COMMAND è il nome del comando e USERNAME è il nome utente, se necessario.



Osserviamo il contenuto del disco da un computer remoto.


Se abbiamo bisogno di una console completa, non per motivi di automazione, ma per controllare un computer specifico, allora possiamo utilizzare il cmdlet Enter-PSSession.



Lavoriamo nella console di un computer remoto.


Lascia che ti ricordi che con l'aiuto di JEA puoi limitare i cmdlet disponibili per tale sessione o dare accesso a quelli di cui hai bisogno senza diritti di amministratore.


Naturalmente, oltre agli strumenti integrati e piccole utenze, esistono molti programmi per la gestione della struttura. Oltre alle soluzioni per adulti, è possibile utilizzare strumenti di monitoraggio come Zabbix e persino la console di gestione antivirus Kaspersky per gestire configurazioni come Chef, Ansible e MS SCCM.


In un’epoca di strutture eterogenee, sarebbe bello poter gestire Windows e Linux in modo unificato. Anche questo può essere fatto utilizzando PowerShell, che di per sé merita un articolo a parte: vale la pena farlo o non è già necessario?


Tag: aggiungi tag

Questa lezione lo mostrerà come eliminare un file tramite riga di comando in Windows(7, 8, XP, Vista). In questo ti aiuteranno i comandi DEL o ERASE, che vengono utilizzati quando non è possibile nel solito modo eliminare un file. Per , DEL e ERASE non sono adatti.

Naturalmente, per cominciare. Con questa azione otterrai i migliori risultati.

Se utilizzi questa lezione, il file verrà eliminato immediatamente senza essere inviato al cestino.

Nel cmd digita DEL /? e premi Invio per visualizzare in anteprima le opzioni del comando. Se lo hai fatto correttamente, vedrai una spiegazione (screenshot sotto).

Utilizzo di cmd all'avvio di Windows

A volte diventa necessario entrare in cmd prima di avviare il sistema. Ciò è dovuto al fatto che il malware blocca l'accesso riuscito o settore di avvio sistema è danneggiato, i seguenti passaggi ti aiuteranno:

  1. Apri il prompt dei comandi all'avvio di Windows
  2. Nel cmd inserisci DiscoPart e premere Invio
  3. Successivamente dovrai scrivere il volume dell'elenco e premere nuovamente Invio (vedi screenshot qui sotto). Ciò ti consentirà di vedere la lettera dell'unità in cui desideri eliminare il file.
  4. Dopo aver ricevuto le informazioni, digitare exit e fare clic su Invio.

Ora sentiti libero di inserire le opzioni per i comandi di rimozione, descritti di seguito.

Con questi passaggi eliminerai qualsiasi file sul tuo computer utilizzando la riga di comando.

Eliminazione di un file specifico

Per eliminare un elemento specifico, è necessario conoscerne il nome e l'estensione. Altrimenti aumenta la probabilità di eliminare la cosa sbagliata!

In cmd, inserisci il seguente comando e premi invio:

DEL /F /S /Q /A "Percorso completo dell'elemento con estensione"

Se ad esempio voglio eliminare con il nome “delete” e con estensione (.bat), che si trova sul drive C nella cartella “trash”, devo inserire il comando:

DEL /F /S /Q /A "C:\trash\delete.bat"

Elimina tutti i file con e senza conferma dalla riga di comando

In questo caso, è necessario confermare o negare le azioni con le lettere (Y - sì / N - no) per eliminare tutti i file nella directory principale e nelle sottocartelle.

Per confermare utilizzare questa sintassi:

DEL /F /S /Q /A "Percorso completo della cartella\*"

Se devo eliminare tutti i file sull'unità D dalla cartella Cestino, che contiene molte altre directory e file, utilizzerei il comando:

DEL /F /S /Q /A "D:\aggiungi al carrello\*"

In modo da elimina il file dalla riga di comando con conferma, /P viene aggiunto ai parametri e si presenta così:

DEL /P /F /S /A "D:\esperimento\*"

È possibile eliminare tutti i file con una determinata estensione, quindi il comando sarà simile a:

DEL /F /S /Q /A "Percorso completo della cartella\*.estensione"

È particolarmente utile quando sono presenti molti elementi non necessari dello stesso tipo che non è possibile ordinare manualmente, ma che possono essere semplicemente eliminati in batch da cmd.

Con il giusto approccio, puoi eliminare il file tramite riga di comando, in pochi secondi. Spero che i consigli siano stati utili. Se sei interessato a cmd, ti consiglio di leggere il materiale, che non sarà meno interessante.

Utilità come Telnet e programmi di gestione remota come PC Anywhere di Symantec consentono di eseguire programmi su sistemi remoti, ma non sono così facili da installare perché è necessario installare anche il software client sui sistemi remoti a cui si desidera accedere. PsExec è una versione leggera di Telnet. Consente di eseguire processi su sistemi remoti utilizzando tutte le funzionalità dell'interfaccia interattiva. applicazioni della console e non è necessario installare manualmente il software client. Il vantaggio principale di PsExec è la capacità di chiamare in modo interattivo l'interfaccia della riga di comando su sistemi remoti ed eseguire in remoto strumenti come IpConfig. Questo è l'unico modo per visualizzare computer locale dati sul sistema remoto.

Nota. Alcuni scanner antivirus segnalare che uno o più di questi programmi sono infetti dal virus “remote admin”. Nessuno dei programmi inclusi nella suite PsTools contiene virus, ma sono stati utilizzati da virus, motivo per cui compaiono questi avvisi.

Installazione

Basta copiare il programma PsExec nella cartella dell'eseguibile. Quando si immette il comando psexec, viene visualizzata la guida sulla sintassi del comando.

Il programma PsExec funziona sui sistemi operativi Windows Vista, NT 4.0, Win2000, Windows XP e Server 2003, comprese le versioni a 64 bit del sistema operativo

Utilizzo

Nell'articolo di Mark Russinovich nel numero Registro di Windows IT Pro Magazine di luglio 2004 descrive ulteriori metodi di utilizzo del programma PsExec.

utilizzo: psexec [\\computer[,computer2[,...] | @file] [-u utente [-p password]] [-n s] [-l] [-s|-e] [-x] [-i [sessione]] [-c [-f|-v]] [-w directory] [-d] [-<приоритет>][-a n,n,... ] programma [argomenti]

computer

Indica a PsExec di eseguire l'applicazione computer specificato o computer. Se il nome del computer non è specificato, PsExec avvierà l'applicazione in sistema locale, se al posto del nome del computer viene specificato il carattere asterisco (\\*), il programma PsExec avvierà l'applicazione su tutti i computer del dominio corrente.

@file

Indica a PsExec di eseguire l'applicazione su tutti i computer elencati nel file di testo specificato.

I processori su cui può essere eseguita l'applicazione sono separati da virgole e i processori sono numerati a partire da 1. Ad esempio, per eseguire l'applicazione sui processori due e quattro, immettere "-a 2,4"

Il programma specificato viene copiato sul sistema remoto per l'esecuzione. Se questo parametro non è specificato, l'applicazione deve trovarsi nella cartella di sistema del sistema remoto.

Indica che non è necessario attendere il completamento dell'applicazione. Questa opzione deve essere utilizzata solo quando si eseguono applicazioni non interattive.

Il profilo dell'account specificato non è caricato.

Il programma specificato viene copiato sul sistema remoto, anche se tale file esiste già sul sistema remoto.

Il programma avviato ottiene l'accesso al desktop della sessione specificata sul sistema remoto. Se non viene specificata alcuna sessione, il processo viene eseguito in una sessione della console.

Quando viene avviato un processo, all'utente viene fornito diritti limitati(vengono revocati i diritti del gruppo Amministratori e all'utente vengono concessi solo i diritti assegnati al gruppo Utenti). In Windows Vista, il processo inizia con un basso livello di affidabilità.

Consente di impostare il ritardo di connessione ai computer remoti (in secondi).

Consente di specificare una password facoltativa per il nome utente. Se questo parametro viene omesso, ti verrà richiesto di inserire una password e la password non verrà visualizzata sullo schermo.

Il processo remoto viene avviato dall'account di sistema.

Consente di specificare un nome utente opzionale per accedere al sistema remoto.

Il file specificato viene copiato sul sistema remoto anziché su quello esistente solo se il suo numero di versione è superiore o è più recente.

Consente di specificare la directory di lavoro (percorso all'interno del sistema remoto) per il processo.

Visualizza l'interfaccia utente sul desktop Winlogon (solo sistema locale).

-una priorità(una priorità)

Consente di impostare diverse priorità per un processo: -low (bassa), -belownormal (sotto la media), -abovenormal (sopra la media), -high (alta) o -realtime (tempo reale).

programma

Il nome del programma da avviare.

argomenti

Argomenti da passare (notare che i percorsi dei file devono essere specificati come percorsi locali sul sistema di destinazione).

Per specificare un nome di applicazione che contiene spazi, utilizzare le virgolette, ad esempio psexec \\marklap "c:\nomelungo\app.exe". I dati inseriti vengono trasferiti al sistema remoto quando si preme il tasto "Invio", per terminare il processo remoto è necessario premere la combinazione di tasti Ctrl-C.

Se il nome utente non è specificato, allora processo remoto viene eseguito dallo stesso account del programma PsExec. Tuttavia, poiché il processo remoto viene rappresentato, non avrà accesso a risorse di rete sistema remoto. Se viene specificato un nome utente, il processo remoto viene eseguito con l'account specificato e ottiene l'accesso alle stesse risorse di rete sul sistema remoto come questo. Account. Tieni presente che la password viene inviata al sistema remoto in chiaro.

Quando si accede a un sistema locale, è possibile utilizzare questa versione di PsExec al posto di Runas poiché PsExec non richiede diritti di amministratore.

Esempi

Questo comando visualizza l'interfaccia interattiva della riga di comando sul sistema \\marklap:

psexec\\marklap cmd

Questo comando esegue il programma IpConfig sul sistema remoto con il parametro /all e visualizza i dati risultanti sullo schermo del sistema locale:

psexec \\marklap ipconfig /all

Questo comando copia test.exe sul sistema remoto e lo esegue in modo interattivo.

psexec \\marklap -c test.exe

Se un programma di questo tipo è già installato sul sistema remoto e non si trova nella directory di sistema, specificare il percorso completo di questo programma

psexec \\marklap c:\bin\test.exe

Questo comando esegue Regedit in modo interattivo dall'account di sistema per visualizzare i dati per le chiavi di registro SAM e SECURITY:

psexec -i -d -s c:\windows\regedit.exe

Questo comando viene utilizzato per chiamare il programma Internet Explorer per conto di un utente con diritti limitati:

psexec -l -d "c:\programmi\internet explorer\iexplore.exe"

Uno dei compiti più popolari amministratori di sistema- si tratta di eseguire un comando su un computer remoto. Potrebbe essere necessario per installare un programma o un'utilità, modificare eventuali impostazioni, ecc. Raramente si parla di un solo computer, più spesso il comando deve essere eseguito su più workstation o server .

Poiché questo problema è popolare, ci sono molti modi per risolverlo. A partire dai criteri di gruppo (in cui è possibile utilizzare script di accesso o di avvio per questo scopo) fino a sistemi potenti software di gestione, come System Center Essentials o System Center Configuration Manager. Ma in questo articolo voglio considerare i metodi che sono immediatamente disponibili dalla riga di comando o dai file di script e che non richiedono preinstallazione agenti e altri disordini. Tuttavia, ovviamente ci sono alcuni requisiti preliminari. Ad esempio, dovresti avere poteri amministrativi sul computer su cui desideri eseguire il comando (ad eccezione dello scenario "proxy", ma ne parleremo più avanti).

Uno dei miei modi preferiti per risolvere questo problema è l'utilità della riga di comando PsExec.exe scritta da Mark Russinovich, che puoi scaricare gratuitamente dal sito web Windows SysInternals. Puoi trovare un collegamento ad esso alla fine dell'articolo. Non richiede installazione sul sistema, puoi semplicemente copiarlo in una delle cartelle contenute nella variabile d'ambiente %path% e richiamarlo da qualsiasi shell a riga di comando: Cmd o PowerShell.

Usare PsExec è molto semplice. Ad esempio, per eseguire ipconfig /flushdns sul computer principale, è sufficiente eseguire il comando seguente:

psexec\\main ipconfig /flushdns

Il comando ipconfig verrà eseguito sul computer principale utilizzando le tue credenziali. Una volta completato ipconfig, tutto l'output di testo verrà inviato al tuo computer e verrà restituito anche un codice di errore. Se il comando è stato eseguito con successo, sarà uguale a 0.

Naturalmente, le capacità di PsExec non finiscono qui. Chiamando l'utilità senza parametri, puoi visualizzarne altri Opzioni disponibili. Presterò attenzione solo ad alcuni di essi.

L'opzione -d dice a PsExec che non è necessario attendere l'esecuzione del comando, ma semplicemente eseguirlo e dimenticarlo. In questo caso non riceveremo output da utilità della console, ma potremo avviarne altri senza attendere il completamento del comando precedente. Ciò è molto utile se è necessario eseguire, ad esempio, un programma di installazione su più computer.

Per impostazione predefinita, PsExec esegue i comandi in modalità nascosta, ovvero sul sistema in cui viene eseguito il comando non verranno visualizzate finestre o finestre di dialogo. Tuttavia, è possibile modificare questo comportamento utilizzando l'opzione -i. Successivamente è possibile specificare il numero della sessione in cui visualizzare Windows oppure non specificarlo, quindi l'interfaccia verrà visualizzata nella sessione della console.

Pertanto, per visualizzare una finestra con le informazioni sulla versione sistema operativo sul computer principale, dovresti eseguire PsExec in questo modo:

psexec -i \\principale winver.exe

Se desideri eseguire un comando su più computer contemporaneamente, troverai utile poter leggere i loro nomi file di testo elenco.

psexec @c:\comps.txt systeminfo.exe

Ebbene, una delle capacità più utili di PsExec è la capacità di reindirizzare in modo interattivo input/output tra computer, il che ci consente di eseguire, ad esempio, cmd.exe su Server remoto e impartisci comandi e ottieni i risultati sul computer locale.

Come funziona PsExec?

Tutto ciò che è geniale è semplice. Nelle risorse del file eseguibile PsExec.exe è presente un altro file eseguibile: PSEXESVC, che è un servizio Windows. Prima di eseguire il comando, PsExec decomprime questa risorsa in un file amministrativo nascosto cartella condivisa computer remoto, nel file: \\NomeComputer\Admin$\system32\psexesvc.exe. Se hai specificato utilizzando l'opzione -c che devi copiare i file eseguibili su questo sistema, verranno copiati anche in questa cartella.

Una volta completate le fasi preparatorie, PsExec installa e avvia il servizio utilizzando l'API di gestione dei servizi di Windows. Dopo l'avvio di PSEXESVC, vengono creati diversi canali tra esso e PsExec per trasferire i dati (comandi di input, risultati, ecc.). Una volta completato, PsExec interrompe il servizio e lo rimuove dal computer di destinazione.

Strumentazione gestione Windows (WMI)

Il prossimo modo per implementare questa attività popolare di cui voglio parlare è utilizzare Strumentazione gestione Windows. WMI è presente in tutti i sistemi operativi Microsoft a partire da Windows 2000, e anche su Windows 9x può essere installato da pacchetto separato. WMI è abilitato per impostazione predefinita e non richiede altre impostazioni. Per usarlo è sufficiente diritti amministrativi e il protocollo DCOM consentito sul firewall. WMI offre enormi capacità per la gestione dei sistemi, ma al momento siamo interessati solo a uno di essi.

Per avviare i processi, abbiamo bisogno del metodo Create della classe Win32_Process. È abbastanza facile da usare. In PowerShell questo viene fatto in questo modo:

$Computer = "principale"
$Comando = "cmd.exe /c systeminfo.exe >
("\\$Computer\root\cimv2:Win32_Process").crea ($Comando)

Qui ho specificato cmd.exe come processo da avviare e ho passato il comando richiesto come argomenti. Ciò è necessario se è necessario utilizzare le variabili di ambiente del computer remoto o le istruzioni cmd.exe integrate come ">" per reindirizzare l'output su un file. Il metodo Create non attende il completamento del processo e non restituisce risultati, ma ci comunica il suo identificatore: ProcessID.

Se utilizzi un computer su cui non è ancora installato PowerShell, puoi richiamare questo metodo WMI anche da uno script VBScript. Ad esempio in questo modo:

Listato n.1 – Avvio di un processo utilizzando WMI (VBScript)

Computer = "PC3"
Comando = "cmd.exe /c systeminfo.exe > \\server\condivisione\%nomecomputer%.txt"
Imposta objWMIService = GetObject("winmgmts:\" & Computer & "\root\cimv2:Win32_Process")
Risultato = objWMIService.Create("calc.exe", Null, Null, intProcessID)

Ma è molto più semplice utilizzare l'utilità della riga di comando wmic.exe che fornisce abbastanza interfaccia intuitiva per lavorare con WMI ed è incluso nei sistemi operativi a partire da Windows XP. In esso, per avviare, ad esempio, una calcolatrice sul computer principale, è sufficiente eseguire il seguente comando:

wmic /node:chiamata del processo principale crea calc.exe

Naturalmente, le funzionalità di WMI non si limitano al solo avvio dei processi. Se sei interessato ad approfondire lo studio di questa tecnologia, ti consiglio di leggere gli articoli di Konstantin Leontiev su WMI, i link ai quali puoi trovare alla fine dell'articolo.

Scripting remoto WSH

Sì, stranamente per Windows Ospite della sceneggiaturaÈ anche possibile eseguire script su altri computer. È vero, questa funzione non ha guadagnato molta popolarità, molto probabilmente perché richiede troppe misure preparatorie e in cambio offre pochissime opportunità. Ma ti parlerò comunque di questo metodo, poiché potrebbe tornarti utile.

Quindi, per eseguire lo script su un altro computer utilizzando WSH, dovremo fare quanto segue:

Diritti di amministratore sul computer remoto. Ciò è ovvio ed è necessario per quasi tutti gli altri metodi di avvio elencati in questo articolo. Consenti lo scripting remoto WSH creando un parametro stringa Remote nel registro di sistema uguale a "1" nella chiave di registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings A causa dell'errore descritto nell'articolo del database Conoscenza Microsoft numero 311269, sui sistemi Windows XP potrebbe essere necessario eseguire il comando wscript –regserver.Se i tuoi computer utilizzano un firewall, deve consentire le chiamate DCOM. Inoltre, questo deve essere fatto non solo sul computer gestito, ma anche su quello da cui si desidera eseguire lo script. Sui sistemi Windows XP con Service Pack 2 e versioni successive, è necessario modificare le impostazioni di sicurezza DCOM. Questo può essere fatto utilizzando Criteri di gruppo. Nel nodo Configurazione computer\Impostazioni Windows\Impostazioni sicurezza\Criteri locali\Opzioni sicurezza, le autorizzazioni devono essere impostate come segue: DCOM: Restrizioni di accesso al computer nella sintassi SDDL (Security Descriptor Definition Language)
Concedere le autorizzazioni Accesso anonimo e Tutti Consenti accesso locale e Consenti accesso remoto DCOM: restrizioni all'avvio del computer nella sintassi SDDL (Security Descriptor Definition Language)
Concedere al gruppo Amministratori le autorizzazioni Consenti avvio locale, Consenti avvio remoto, Consenti attivazione locale, Consenti attivazione remota
Gruppo Everyone: Consenti avvio locale, Consenti attivazione locale

Bene, dopo tutte queste procedure, puoi provare a eseguire il tuo script su un altro computer.

Uno script di esempio che utilizza questa tecnologia:

Listato n.2 – Scripting remoto WSH (VBScript)

Imposta objController = CreateObject("WshController")
Imposta objRemoteScript = objController.CreateScript("C:\test.vbs", "PC5")WScript.ConnectObject objRemoteScript, "remote_"
objRemoteScript.Execute
Esegui mentre objRemoteScript.Status 1
WScript.Dormire 1000
Ciclo continuo
MsgBox "Script completato"
Sub remote_Error
Dim objErrore
Imposta objError = objRemoteScript.Error
WScript.Echo "Errore - Riga: " & objError.Line & _
", Carattere: " & objError.Carattere & vbCrLf & _
"Descrizione: " & objError.Description
WScript.Quit –1
Fine sott

Nella seconda riga vengono specificati come parametri per la funzione CreateScript il percorso del file script che verrà eseguito sul computer remoto e il nome effettivo di questo computer.

Agenda

L'utilità di pianificazione può essere controllata dalla riga di comando utilizzando due utilità: at.exe e schtasks.exe. Entrambe queste utilità consentono di specificare il nome di un computer remoto per creare un'attività e, quindi, di risolvere il nostro problema. Ma esamineremo in dettaglio solo schtasks.exe, poiché offre molte più funzionalità.

Sebbene eseguire comandi su altri computer non sia lo scopo principale dello scheduler, consente comunque di implementare molti scenari interessanti. Ad esempio, puoi usarlo per abilitare l'installazione del software durante la pausa pranzo. O se i tuoi utenti pranzano presso tempo diverso, l'avvio può essere eseguito dopo un certo periodo di inattività del computer.

schtasks /create /s server6.td.local /tn install /tr \\main\data\install.cmd /sc una volta /st 13:00 /ru sistema

È importante capire con quale account verrà eseguita l'attività. In questo esempio, ho impostato il parametro /ru su system, pertanto, per completare la configurazione dell'account del computer, sarà richiesto l'accesso in lettura all'account del computer. cartella di rete con la distribuzione del programma.

Un'altra soluzione utile, mi sembra, è programmare alcune azioni per esecuzione quotidiana ed eliminare l'attività solo quando ne viene confermato il successo. Cioè, puoi creare un semplice file batch che prima avvia il programma di installazione del programma, attende il suo completamento e controlla se il programma è stato installato correttamente. In tal caso, rimuove il lavoro dallo scheduler su quel computer. Un esempio di tale file:

Lista n. 3 – Installazione del programma e quindi eliminazione dell'attività (Windows Batch)

msiexec /qn /pacchetto \\server\condivisione\subinacl.msi
se esiste "c:\programmi\Windows Resource Kits\Tools\subinacl.exe" (
subinacl /tn Installa_Subinacl /f
)

WinRM (gestione WS)

WinRM è un'implementazione dello standard aperto DMTF (Distributed Management Task Force) di Microsoft che consente la gestione dei sistemi tramite servizi web. Non entrerò più in profondità nella struttura della tecnologia, ma descriverò solo brevemente ciò che è necessario per utilizzarla.

WinRM versione 1 e successive sono incluse nei sistemi operativi a partire da Windows Vista e Windows Server 2008. Per Windows XP e Windows Server 2003, è possibile installare WinRM come pacchetto separato (vedere collegamenti).

Per configurare rapidamente il tuo computer per le connessioni utilizzando porte standard e consentendo connessioni ad account amministrativi, esegui semplicemente il comando:

winrm configurazione rapida

Per evitare che winrm chieda conferma, è possibile aggiungere l'opzione -quiet alla chiamata. Puoi trovare informazioni sulla messa a punto della guida integrata di winrm:

configurazione della guida di winrm

Se un server Web è in esecuzione su un computer gestito, WinRM non interferirà in alcun modo con esso, sebbene utilizzi le porte HTTP standard per impostazione predefinita. Intercetterà solo le connessioni destinate specificamente ad esso.

Naturalmente non è necessario eseguire manualmente questo comando su ogni computer che si desidera gestire. Tutte le impostazioni necessarie possono essere facilmente effettuate utilizzando i criteri di gruppo. Per fare questo è necessario:

Configurare il servizio WinRM (Gestione remota Windows) per l'avvio automatico Configurare l'elemento Criteri di gruppo Configurazione computer\Modelli amministrativi\Componenti di Windows\Gestione remota Windows (WinRM)\Servizio WinRM\Consenti la configurazione automatica dei listener. Qui è necessario specificare gli intervalli di indirizzi IP da cui sono consentite le connessioni. Naturalmente, dovrai anche consentire le connessioni alle porte appropriate (80 per impostazione predefinita) nel Windows Firewall.

Indipendentemente dal fatto che venga utilizzata la porta HTTP (80) o HTTPS (443), il traffico trasmesso da WinRM è crittografato (a meno che ovviamente non si disabiliti questa opzione). Il protocollo di autenticazione predefinito è Kerberos.

Ma basta con le impostazioni, passiamo direttamente all’utilizzo. Sebbene l'utilità winrm consenta di configurare il servizio WinRM, nonché di eseguire, ad esempio, query WMI, siamo più interessati a un'altra: winrs. Le lettere RS qui stanno per Remote Shell. WinRS funziona in modo molto simile a PsExec sebbene utilizzi la tecnologia WinRM. Il nome del computer viene specificato con l'opzione -r, seguita dal comando da eseguire. Ecco alcuni esempi:

winrs -r:Core ver.exe

Poiché winrs utilizza già cmd.exe come shell remota, puoi accedere facilmente alle variabili di ambiente remoto nei comandi o utilizzare altri comandi integrati di cmd.exe:

winrs -r:Core "dir c:\temp > c:\temp\list.txt"

Come PsExec, l'utilità winrs ti consente di aprire una sessione interattiva su un computer remoto:

winrs -r:main cmd.exe

Questa funzione è simile ad una sessione telnet, ma usare winrs è decisamente migliore di telnet e anche di PsExec dal punto di vista della sicurezza. Indipendentemente dal fatto che la porta sia HTTP (80) o HTTPS (443), il traffico inviato da WinRM è crittografato (a meno che non si disabiliti questa opzione, ovviamente). Il protocollo di autenticazione predefinito è Kerberos.

Windows PowerShell 2.0 Remotazione

Sebbene la seconda versione di Windows PowerShell sia ancora in fase di beta testing al momento della stesura di questo articolo, vale sicuramente la pena parlare delle sue capacità nel campo dell'esecuzione di comandi remoti. Puoi provarlo tu stesso scaricando la versione di anteprima (vedi link) o come parte della versione beta di Windows 7 o Windows Server 2008 R2.

L'infrastruttura PowerShell Remoting è basata su WinRM versione 2.0, e quindi eredita tutti i vantaggi di questa tecnologia, come la crittografia dei dati trasmessi e la possibilità di lavorare su porte standard HTTP/HTTPS. Ma grazie alle ricche opportunità Linguaggio Windows PowerShell e la sua capacità di lavorare con gli oggetti, otteniamo di più grandi opportunità. Al momento anche il pacchetto WinRM2.0 è in fase di beta testing ed è disponibile per il download solo per i sistemi Windows Vista e Windows 2008. Sistemi Windows 7 e Windows Server 2008R2 sarà integrato in modo nativo, proprio come PowerShell 2.0.

Aggiornamento: al momento della pubblicazione dell'articolo su ItBand.ru, le versioni finali di PowerShell 2.0 e WinRM 2.0 sono già disponibili per tutte le piattaforme supportate. In Windows Server 2008R2 e Windows 7 sono già inclusi come componenti integrali del sistema, mentre per Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008 tutti i componenti necessari possono essere ottenuti sotto forma di un pacchetto chiamato Windows Quadro di gestione.

Prima di poter sfruttare tutti questi vantaggi, è necessario abilitare i servizi remoti di PowerShell sia sul computer manager che su quello gestito. Questa operazione è semplice eseguendo il cmdlet (comando di Windows PowerShell) Enable-PSRemoting. Inoltre, se si aggiunge il tasto -Force, non verrà richiesta alcuna conferma. Se necessario, questo cmdlet chiamerà winrs quickconfig e creerà eccezioni in Windows Firewall, quindi non sarà necessario eseguire ulteriori passaggi.

Successivamente, puoi eseguire facilmente comandi su altri computer utilizzando il cmdlet Invoke-Command (o il suo alias icm):

Invoke-Command -ComputerName Main -ScriptBlock (dump dell'interfaccia netsh > c:\ipconfig.txt)

Naturalmente, il comando può essere inserito in anticipo in una variabile e per il parametro -ComputerName è possibile specificare i nomi non di uno, ma di più computer contemporaneamente. La sequenza seguente consente di visualizzare la versione del file Explorer.exe da tre computer contemporaneamente.

$Command = ((get-item c:\Windows\explorer.exe).VersionInfo.FileVersion)
Invoke-Command -ComputerName Main, Server7, Replica -ScriptBlock $Command

Come puoi vedere, puoi passare più comandi contemporaneamente in un blocco, inserire i risultati della loro esecuzione su più computer in una variabile e quindi elaborarli su postazione di lavoro utilizzando Funzionalità di Windows PowerShell per lavorare con gli oggetti.

Tuttavia Funzionalità di PowerShell La gestione remota è solo l'inizio. È possibile utilizzare il cmdlet Enter-PSSession per accedere a una sessione interattiva di Windows PowerShell su un computer remoto. È possibile uscire da una sessione di questo tipo utilizzando il cmdlet Exit-PSSession o semplicemente uscire.

Il cmdlet New-PSSession crea sessioni su computer remoti, puntatori ai quali possono essere inseriti in una variabile e quindi passati come argomento a Invoke-Command per eseguire comandi su più computer contemporaneamente, in un ambiente persistente. Puoi vedere un esempio nello screenshot, in cui eseguo una sequenza di comandi su più computer contemporaneamente dall'elenco c:\computers.txt.

Procura

Questo metodo differisce da tutti quelli precedenti e svolge compiti completamente diversi, ma non è per questo meno rilevante. Quando la delega dell'autorità non è possibile, o fornisce troppa potenza, consente a un utente standard di eseguire un comando che richiede privilegi amministrativi senza concedere in alcun modo ulteriore autorità o compromettere la password dell'amministratore.

Molto spesso, le persone risolvono questi problemi utilizzando utilità come cpau.exe (vedi collegamenti) che creano un file con una password dell'account amministrativo crittografata che consente di eseguire un programma specifico. Il problema, tuttavia, è che anche se la password è crittografata, l'utilità dovrà decrittografarla prima di eseguire il programma. Di conseguenza, l'utente può utilizzare un'utilità che ripete l'algoritmo di decrittografia della password e scoprirlo, che può quindi essere utilizzato per avviare altri programmi o ottenere privilegi aggiuntivi. In pratica, ovviamente, questo è abbastanza difficile per utenti ordinari, che non hanno conoscenze speciali, ma, tuttavia, è del tutto possibile. Vorrei chiarire ancora una volta che questo non è un problema con un'utilità specifica, ma un problema con questo approccio in generale.

Potrebbe anche sembrare che il parametro /savecred dell'utility runas sia adatto a risolvere il problema. Ma qui ci sono anche due problemi. In primo luogo, come nel caso sopra descritto, la password viene memorizzata sul computer dell'utente e, quindi, può essere decrittografata, anche se nel caso di runas ciò richiederà i diritti amministratore locale. In secondo luogo, runas memorizza le credenziali senza associarle a un comando specifico e, quindi, l'utente potrà eseguire con diritti elevati non solo il comando a cui si desidera dargli accesso, ma anche qualsiasi altro.

Per evitare questi problemi ma consentire comunque l'esecuzione di un comando specifico, è possibile utilizzare una tecnica chiamata "proxying".

Funziona come segue. Uno script con privilegi elevati è costantemente in esecuzione sul computer. Ad esempio, nel nostro caso verrà avviato da un account che dispone dei diritti di amministratore sul file server. Al segnale dell'utente, ne eseguirà uno in anticipo un comando specifico. In questo esempio, chiudi tutti i file aperti in rete.

Per organizzare questo sistema, lo posizioneremo sul server, ad esempio nella cartella c:\scripts\ file batch Server.cmd e Action.cmd .

Elenco n. 4 – Server.cmd (Windows Batch)

imposta trigger=c:\commandShare\trigger.txt
imposta azione=c:\scripts\azione.cmd
imposta log=c:\scripts\log.txt
:inizio
se esiste %trigger% avvia %action% & echo %time% %date%>>%log% & del %trigger%
sleep.exe 5
vai a iniziare

Elenco n. 5 – Action.cmd (Windows Batch)

for /f “skip=4 tokens=1” %%a in ('net files') esegui net files %%a /close
Uscita

Server.cmd attenderà un segno da parte dell'utente (creando un file in una determinata posizione) e, dopo averlo ricevuto, avvierà un file con i comandi: Action.cmd. Naturalmente, gli utenti non dovrebbero avere alcun accesso a questa cartella. Avvio automatico Server.cmd può essere organizzato all'avvio del computer semplicemente creando l'attività appropriata nello scheduler:

schtasks /create /ru dominio\amministratore /rp /sc onstart /tn ProxyScript /tr c:\scripts\server.cmd

Dopo il parametro /ru viene indicato l'account con cui verrà eseguito lo script (nel nostro caso ha diritti di amministratore sul server), poiché dopo il parametro /rp non viene specificata la password - verrà richiesta durante la creazione del compito. Il parametro /sc consente di specificare il momento in cui viene avviato lo script, nel nostro caso - quando il computer è acceso. Bene, /tn e /tr ti consentono di specificare il nome dell'attività e del file eseguibile.

Ora, affinché l'utente possa segnalare lo script, creeremo una cartella c:\commandShare e la renderemo accessibile tramite la rete. Solo gli utenti che eseguiranno il comando dovrebbero avere accesso in scrittura a questa cartella.

Successivamente sarà sufficiente che l'utente posizioni il file Run.cmd sul desktop.

Elenco n. 6 – Run.cmd (Windows Batch)

test eco > \\server\commandShare\trigger.txt

Se eseguito per conto dell'utente, verrà creato il file \\server\commandShare\trigger.txt. Lo script Server.cmd, dopo averlo notato, lancerà il file Action.cmd con i suoi privilegi, aggiungerà una voce al file c:\scripts\log.txt relativa all'ora corrente, quindi eliminerà trigger.txt per non eseguire nuovamente il comando finché segnale successivo utente.

Lo script Server.cmd utilizza l'utilità Sleep.exe, che consente di sospendere l'esecuzione dello script per un periodo di tempo specificato in secondi. Non è incluso nel sistema operativo, ma può essere prelevato dagli strumenti del Resource Kit (vedi collegamenti) e semplicemente copiato su qualsiasi computer.

Tornerà utile

Abbiamo deciso di imparare lingua straniera? Un tutor di inglese a domicilio ti aiuterà in questo. Lì puoi esercitarti con altri utenti.

I migliori articoli sull'argomento