Benutzer mit den meisten Antworten
Invoke-command mit IF Abfrage

Frage
-
Hallo,
ich bin dabei ein Scipt zu schreiben welches mir Office 2010 installiert.
Nun würde ich gerne eine Abfrage einbauen...wenn Programm Word,Excel,Powerpoint oder Outlook läuft, dann verlassen die Remotesitzung...wenn nicht geh weiter...und dabei hängt es nun leider bei mir!Ich hoffe ihr könnt mir helfen
Der Code der eingebaut werden muss (funtioniert,hab ich getestet!
Invoke-Command -Session (Get-PSSession) -ScriptBlock{$Officeprozess=Get-Process|Where-Object {$_.processname -like "*word*" -or $_.processname -like "*excel*" -or $_.processname -like "*outlook*" -or $_.processname -like "*powerpnt*"}}
if ($Officeprozess -eq $null) { "Führe die anderen Invoke Befehle aus" } else { "Remove-PSSession (Get-PSSession)" }
Mein Script:
#Computer einlesen $Collection= "PC1","PC2" #Kontakt aufbauen foreach ($item in $collection){ New-PSSession $item #Roaming kopieren Invoke-Command -Session (Get-PSSession) -ScriptBlock{ $UserprofileaufClient=Get-ChildItem -Path $env:SystemDrive\Users} Invoke-Command -Session (Get-PSSession) -ScriptBlock{ New-Item -Path "C:\Temp\Officebackup" -ItemType directory} Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Users\$Item\AppData\Roaming\Microsoft\Office" -recurse -Destination "C:\Temp\Officebackup\$Item\" }} #Sichert die ACL Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Users\$Item\AppData\Roaming\Microsoft\Templates" -Recurse -Destination "C:\Temp\Officebackup\$Item\" -ErrorAction SilentlyContinue}} # für Office > 2003 ->Sichert die normal.dot im Order Templates und erstellt diese im Backup Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Users\$Item\AppData\Roaming\Microsoft\Vorlagen" -Recurse -Destination "C:\Temp\Officebackup\$Item\" -ErrorAction SilentlyContinue}} # für Office 2003 ->Sichert die normal.dot im Order Templates und erstellt diese im Backup #Mitteilung an User, dass Office installiert wird! Invoke-Command -Session (Get-PSSession) -ScriptBlock{msg * /w "Eine Anwendung wird installiert, Sie werden benachrichtig wenn die Installation abgeschlossen ist! IT-Abteilung"} #Office deinstallieren /installieren Invoke-Command -Session (Get-PSSession) -ScriptBlock{& cmd /c msiexec "\\bbg-mdt-01\Office$\Office2010\SETUP.EXE"} copy-item C:\tool\SysinternalsSuite\PsExec.exe \\$item\c$\temp Invoke-Command -Session (Get-PSSession) -ScriptBlock{& cmd /c C:\temp\PsExec.exe \\$env:COMPUTERNAME /accepteula -s \\bbg-mdt-01\Office$\Office2010\Standard\setup.exe} #Normal.dot g zurück kopieren aber Kopie am Ort belassen als Backup Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){New-Item -Path "C:\Users\$Item\AppData\Roaming\Microsoft\Templates\" -ItemType directory}} Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Temp\Officebackup\$Item\Templates\*" -Destination "C:\Users\$Item\AppData\Roaming\Microsoft\Templates\" -ErrorAction SilentlyContinue}} #2007 und größer Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Temp\Officebackup\$Item\Vorlagen\*" -Destination "C:\Users\$Item\AppData\Roaming\Microsoft\Templates\" -ErrorAction SilentlyContinue}} #2003 #Mitteilung an User, dass Office installiert wurde! Invoke-Command -Session (Get-PSSession) -ScriptBlock{msg * "Die Installation ist abgeschlossen!Vielen Dank für Ihre Geduld! IT-Abteilung."} Add-Content -Value $item -Path "e:\Office2010Std_delpoyment.log" #Exit-PSSession Remove-PSSession (Get-PSSession) }
Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!
- Bearbeitet tonibert Sonntag, 22. November 2015 12:18
Antworten
-
Hallo Toni,
vorab - du hast schon einiges zusammengebaut und bist ja quasi kurz vorm Ziel.
Trotzdem würde ich dir anraten die Umsetzung nochmal zu überdenken.
Du nutzt für jeden Aufruf ein Invoke-Command auf die PSSession - schöner wäre es gewesen, wenn du den ganzen Code in eine ps1-Datei packst und dann sowas wie
invoke-command -computer $MachineName -filepath "C:\Skript.ps1"
machen würdest, um den Code nicht so aufzublasen. Weiter ist die Benutzung von psexec, um dadurch die Deinstallation auf dem Zielrechner mit Admin-Rechten durchzuführen schon arg gefuscht.
Die Benutzung von msg - kann man machen - würde man aber eigentlich auch sauberer machen mit einer Windows Forms Messagebox oder so.
Habt ihr vielleicht einen SCCM im Einsatz? Dann würde ich ein Skript bauen und via dem verteilen lassen.
Als Alternative würde ich dir raten ein PS-Skript zu bauen, dass in sich autark ablaufen kann. Das kannst du z.B. auf deinem Rechner aufbauen und auch live debuggen. Dann machst du sowas wie:
$cred = get-credential #Eingabe eines Users mit höheren Rechten Invoke-Command -ComputerName $Computer -filepath "C:\Skript.ps1" -credential $cred
Die Credentials kannst du dann auch in eine Datei speichern - in etwa so:
Read-host -assecurestring | convertfrom-securestring | out-file C:\cred.txt $password = get-content C:\cred.txt | convertto-securestring $credential = new-object -typename System.Management.Automation.PSCredential -argumentlist "myusername",$pass
Best regards,
David das Neves
Technology Specialist - Consulting Services
Computacenter AG & Co. oHG - Munich
Blog
Creating Powershell GUIs with XAML? Take a look! PSGUI- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Montag, 23. November 2015 17:08
- Als Antwort markiert tonibert Montag, 23. November 2015 18:48
Alle Antworten
-
Hallo Toni,
vorab - du hast schon einiges zusammengebaut und bist ja quasi kurz vorm Ziel.
Trotzdem würde ich dir anraten die Umsetzung nochmal zu überdenken.
Du nutzt für jeden Aufruf ein Invoke-Command auf die PSSession - schöner wäre es gewesen, wenn du den ganzen Code in eine ps1-Datei packst und dann sowas wie
invoke-command -computer $MachineName -filepath "C:\Skript.ps1"
machen würdest, um den Code nicht so aufzublasen. Weiter ist die Benutzung von psexec, um dadurch die Deinstallation auf dem Zielrechner mit Admin-Rechten durchzuführen schon arg gefuscht.
Die Benutzung von msg - kann man machen - würde man aber eigentlich auch sauberer machen mit einer Windows Forms Messagebox oder so.
Habt ihr vielleicht einen SCCM im Einsatz? Dann würde ich ein Skript bauen und via dem verteilen lassen.
Als Alternative würde ich dir raten ein PS-Skript zu bauen, dass in sich autark ablaufen kann. Das kannst du z.B. auf deinem Rechner aufbauen und auch live debuggen. Dann machst du sowas wie:
$cred = get-credential #Eingabe eines Users mit höheren Rechten Invoke-Command -ComputerName $Computer -filepath "C:\Skript.ps1" -credential $cred
Die Credentials kannst du dann auch in eine Datei speichern - in etwa so:
Read-host -assecurestring | convertfrom-securestring | out-file C:\cred.txt $password = get-content C:\cred.txt | convertto-securestring $credential = new-object -typename System.Management.Automation.PSCredential -argumentlist "myusername",$pass
Best regards,
David das Neves
Technology Specialist - Consulting Services
Computacenter AG & Co. oHG - Munich
Blog
Creating Powershell GUIs with XAML? Take a look! PSGUI- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Montag, 23. November 2015 17:08
- Als Antwort markiert tonibert Montag, 23. November 2015 18:48
-
Hallo David,
vielen Dank für deine Antwort!Mit dem Parameter -filepath funktioniert es und ich kann meine IF-Abfrage durchführen!
SUPER und nochmal Danke!
->
"Du nutzt für jeden Aufruf ein Invoke-Command auf die PSSession - schöner wäre es gewesen, wenn du den ganzen Code in eine ps1-Datei packst und dann sowas wie
invoke-command -computer $MachineName -filepath "C:\Skript.ps1"
machen würdest, um den Code nicht so aufzublasen."
Habe ich so umgesetzt, danke für den Hinweis!Es funktioniert sehr gut!
->
"Weiter ist die Benutzung von psexec, um dadurch die Deinstallation auf dem Zielrechner mit Admin-Rechten durchzuführen schon arg gefuscht"
Ich habe verschieden Wege probiert aber leider nichts für mich laufendes gefunden!Wenn du hier einen Hinweis für mich hast nehme ich den gerne an!Wobei das ja Tools von MS sind, daher ist es in meinen Augen nicht ganz so "gefuscht" - :-)
->
"Die Benutzung von msg - kann man machen - würde man aber eigentlich auch sauberer machen mit einer Windows Forms Messagebox oder so"
Habe ich bisher leider nicht nicht gemacht, wenn du da etwas präziser wirst, probier ich es gerne!
->
"Habt ihr vielleicht einen SCCM im Einsatz? Dann würde ich ein Skript bauen und via dem verteilen lassen."
Leider nicht, daher habe ich mich für den PS weg entschieden!
->
"Als Alternative würde ich dir raten ein PS-Skript zu bauen, dass in sich autark ablaufen kann. Das kannst du z.B. auf deinem Rechner aufbauen und auch live debuggen."
Ich habe es genau anders herum gemacht!Erst auf meinem Client probiert und es dann jeweils in -Scriptblock {} gelegt!
Im Moment bin ich noch am testen, wie ich, nach erfolgreicher Installation, die Daten in ein Log schreibe!
Dass ich da add-content nehme ist mir klar, nur wollte ich es in meinem "aufgerufenen" Script am Ende auf einen Netzwerkpfad schreiben, aber das funktioniert leider im Moment noch nicht!
Hast du da vielleicht einen Denkanstoss für mich?!
Ich arbeite seit ca. 1 Jahr voller Begeisterung mit Powershell und lerne halt ständig durch testen und üben an praktischen Themen!Auch das war ein Grund, dass ich mich für die Installation mit PS entschieden habe. Ich erarbeite mir die Sachen eben nach Feierabend privat.Deshalb nochmals vielen Dank für deine bishergen Hinweise!
@Denniver: Es tut mir Leid, ich habe es nicht früher geschafft!
Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!
- Bearbeitet tonibert Montag, 23. November 2015 18:49
-
> @Denniver: Es tut mir Leid, ich habe es nicht früher geschafft!
Alles gut, kein Grund sich zu entschuldigen. :-)
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
(Schneller, besser + komfortabler scripten.)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Montag, 23. November 2015 22:18
-
Hi Toni,
ah sehr schön - freut mich zu lesen, dass ich helfen konnte.
Das mit psexec ist zwar von "Microsoft" vom Mark zur Verfügung gestellt, sollte man aber eigentlich produktiv meiden, wenn es irgendwie möglich ist. Hintergrund: Wenn du es nutzen kannst, kann es auch jeder andere Mitarbeiter mit Admin-Rechten nutzen und könnte damit sich Systemrechte auf anderen Rechnern "erfuschen" und Unsinn treiben. Sonst kannst du es von der technischen Seite aus natürlich benutzen. Ohne SCCM ist es wohl vertretbar.
Messagebox: schau mal hier
Wegen Logging schau dir das mal an hier
___________________________________
Ich arbeite seit ca. 1 Jahr voller Begeisterung mit Powershell und lerne halt ständig durch testen und üben an praktischen Themen!Auch das war ein Grund, dass ich mich für die Installation mit PS entschieden habe. Ich erarbeite mir die Sachen eben nach Feierabend privat.Deshalb nochmals vielen Dank für deine bishergen Hinweise!
_______________________________________________
Sehr gerne! Schau dir mal auf der MVA Microsoft Virtual Academy alles im Powershell an.
MVA-Links zum Einarbeiten: (by Jeffrey Snover und Jason Helmick)
Tools und Skripterstellung - MVA
Bücher:
Best regards,
David das Neves
Technology Specialist - Consulting Services
Computacenter AG & Co. oHG - Munich
Blog
Creating Powershell GUIs with XAML? Take a look! PSGUI -
Hallo David,
die ersten beiden Jumpstarts habe ich mir schon reingezogen :-)Aber Danke!
Den letzen Link kannte ich noch nicht!
Ein Buch habe ich mir auch schon reingepfiffen!Aber das war hier nicht dabei!Ich danke dir, den Rest werde ich mal durcharbeiten!
->
"Wenn du es nutzen kannst, kann es auch jeder andere Mitarbeiter mit Admin-Rechten nutzen und könnte damit sich Systemrechte auf anderen Rechnern "erfuschen" und Unsinn treiben"
Davon haben wir nur IT-Admins aber ich habe dich verstanden!
Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!
- Bearbeitet tonibert Dienstag, 24. November 2015 13:12