Powershell, Karten 61-90
Powershell Grundlagen
Powershell Grundlagen
-
- 1 / 30
-
Cartes-fiches
Welche einfachen Formatierungsmöglichkeiten gibt es?: Ausgabe als Liste, Spalte oder nur jeweils 1 Wert.
Was muss beachtet werden?
format-table: ft (-autosize; -property; -groupby; -wrap) #Tabellenformatierung
Format-List: fl (-groupby) #Listenformatierung
Format-wide: fw (-autosize; -column; -property) #display only the values of a single property. Bsp: Get-Process | Format-Wide name -col 4
Format-… cmdlets müssen immer am Schluss kommen weil "Formatierungsinstruktionen" weitergegeben werden (ausser gefolgt von Out-File oder Out-Printer)
Formatierungsmöglichkeiten "erweitert".
Wie kann z.B. bei get-Process der Wert von VM in MB ausgegeben werden?
Get-Process | Format-Table Name, @{n='VM(MB)';e={$_.VM / 1MB -as [int]}} -autosize
Unterschied von Out-Gridview zu den Format-…. Cmdlets
it won’t accept formatting instructions and will only accept normal objects; Open Result in a new Window
auf was soll beim Filtering geachtet werden? Was soll durche Pipes weitergegeben werden?
Filter left -> möglichst früh filtern und die Anzahl an weiterzureichenden Objekten zu verringern
Welche Vergleichsoperatoren gibt es für Zahlen? Sind diese Case sensitive?
-eq=equal
-ne=not equa
-ge=greater or equal
-le=less or equal
-gt=greater then
lt=less then
(not Case Sensitiv; for Case sensitive use: -ceq; -cne; -cgt; ….) mit -and/-or können diese kombiniert werden. Manche cmdlets unterstützen nur die "alten" comperatoren =;<>;<=;....
wie kann ein Ausdruck negiert werden?
-not or !
"$_.Responding -eq $False" entspricht "-not $_.Responding"
Welche Vergleichsoperatoren gibt es für Strings?
-like
-notlike (not Case sensitive)
-clike, cnotlike (Case sensitive)
-match; -nomatch (vergleicht 2 Strings)
-cmatch; -cnomatch compares String and regular expression
Wie kann das Verhalten von Powershell bei Errors global eingestellt werden? (ErrorActions)
$ErrorActionPreference = "Stop"
SilentlyContinue, Continue, Stop und Inquire sind mögliche Werte.
Wie kann in Powershell auf nach Gruppen sortiert werden? z.B. nach Status bei Services
Get-Service | Sort-Object Status | Format-Table -groupBy Status
Das funktioniert nur wenn vor dem groupBy nach diesem Property sortiert worden ist.
Was macht Out-GridView?
Bsp: Get-Process | Out-GridView
Öffnet den Output in einem neuen "Tabellen-Fenster".
Out-GridView aktzeptiert nur Objekte.
Out-GridView akzeptiert keine Formatierungsvorgaben (Get-Process | Format-Table | Out-GridView -> Fehlermeldung).
wie kann ich in das %temp% Verzeichnis wechseln?
cd ($env:temp)
Was ist WS-MAN, wie funktioniert es?
WS-MAN = Web Services for Management (Seit Powershell v2).
Traffic geht vollständig über http oder https.
Backendservice WinRM
"Daten" werden via XML transferiert.
Wie kann Powershell remote controll aktiviert werden?
Enable-PSRemoting -> Started Set-WSManQuickConfig
Oder via GPO: Computer Configuration > Administrative Templates > Windows Components.
Near the bottom of the list, you’ll find both Remote Shell and Windows Remote
Management
Wie kann ich eine Remote Session z.B. auf "compi1" herstellen und wieder beenden?
(eine one-to-one Verbindung)
Enter-PSSession -computerName compi1
Exit-PSSession
Wie kann ich das Powershell command "Get-EventLog Security" auf den Rechner Server1, Server2, Server 3 ausführen.
ein one-to-many command.
Wo wird der Outpunt angezeigt? Gibt es Limitierungen?
Invoke-Command -computerName Server1,Server2,Server3 -command { Get-EventLog Security }
Der Output wird lokal angezeigt.
Das command wird an max. 32 Computer gleichzeitig gesendet. Bei weiteren fortlaufend sobald eine Remotehost das command beendet hat. (Parameter von invoke-command beachten).
The -command parameter is an alias for the -scriptblock parameter that you will see listed in the help
Für was ist beim command select-object der Parameter -ExpandProperty oder kurz -expand wichtig?
select-Object liefert wie der Name schon sagt ein Object zurück. Wenn nur der Wert eines Properties gewünscht ist dieser mit -expand zurückgegeben werden.
Bsp: Select-Object -expand Name (Gibt den Wert des Properties Name zurück)
Was sind Unterschiede zwischen den folgenden command bezüglich Ausführung? local vs remote.
Invoke-Command -computerName S1,S2 -command { Get-EventLog Security -newest 200 | Where { $_.EventID -eq 1212 }}
Get-EventLog Security -newest 200 -computerName S1,S2 | Where { $_.EventID -eq 1212 }
bezogen auf die lokale Version:
The computers will be contacted sequentially rather than in parallel, which means the command may take longer to execute.
The output won’t include a PSComputerName property, which may make it harder for us to tell which result came from which computer.
The connection won’t be made using WinRM, but will instead use whatever underlying protocol the .NET Framework decides to use. We don’t know what that is, and it might be harder to get the connection through any firewalls
between us and the remote computer.
We’re querying 200 records from each of the three computers, and only then are we filtering through them to find the ones with EventID 1212. That means we’re probably bringing over a lot of records we don’t want.
We’re getting back event log objects that are fully functional.
Was passiert mit Objekten wenn diese von einer Remote Session zurückgegeben werden?
Durch die XML Übertragung und das serialize/deserialized werden keine "richtige" Objekte zurückgeben und können nur bedingt weiterverwendet werden. Properties werden als System.String oder Sytem.Boolean zurückgegeben.
Welche 2 Möglichkeiten gibt es um mit der WMI zu interagieren?
The so-called “WMI cmdlets,” such as Get-WmiObject and Invoke-WmiMethod. These are legacy cmdlets, meaning they still work, but Microsoft isn’t investing in further development of them. They communicate over remote procedure calls (RPCs), which can only pass through a firewall if that firewall supports stateful inspection (in other words, it’s hard).
The new “CIM cmdlets,” such as Get-CimInstance and Invoke-CimMethod. These are more or less equivalent to the old “WMI cmdlets,” although they communicate over WS-MAN (implemented by the Windows Remote Management service)
instead of using RPCs. This is Microsoft’s way forward, and running Get-Command -noun CIM* reveals that Microsoft offers a lot more functionality through these commands.
Keine Credentials möglich -> Invoke-command verwenden.
All of these commands use the same WMI back end. The main difference is in how they communicate, and in how you use them.
WmiObjects: how to list classes from the namespace "root\cimv2"
Was ist in dem cimv2 namespace?
Get-WmiObject -namespace root\cimv2 -list
root\CIMv2 contains all of the core OS and hardware stuff
WmiObjects: how to list the specific class "win32_desktop" from the namespace "root\cimv2"
Get-WmiObject -namespace root\cimv2 -class win32_desktop
Get-WmiObject win32_desktop (root\cimv2 ist der Defaultnamespace und muss nicht angegeben werden, -class ist ein positional parameter)
WMI und Powershell, was ist zu beachten?
WMI ist eine externe technologie mit eigenen Regeln. WMI hat deshalb auch andere Filterregeln die beachtet werden müssen. Die Filter werden von Powershell an WMI weitergegeben und nicht von Powershell bearbeitet. Es gibt keine Hifle zu WMI in Powershell, am besten via google.
WMI-Objects: Wie kann ich die IP-Adresse des lokalen computers anzeigen?
Die WMI-Klasse ist Win32_NetworkAdapterConfiguration
Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress
Get-WmiObject -Class Win32_NetworkAdapterConfiguration | Format-Table -Property IPAddress
Was ist bei ansynchronen (background) und synchronen commands zu beachten?
Bei asynchronen commands können keine Eingaben auf "mögliche Eingabeaufforderungen" gemacht werden.
Bei asynchronen commands werden keine Fehler angezeigt.
Bei asynchronen commands kann nicht nach fehlenden Paramentern gefragt werden -> command fails.
We typically run commands synchronously to test them out and get them working properly,
and only run them in the background after we know they’re fully debugged and
working as we expect.
gibt es Voraussetzunge welche für lokale Jobs beachtet werden müssen (start-job)?
Remoting muss aktiviert sein, sonst können keine start-job ausgeführt werden. Enable-PSRemoting
Bsp. für einen backgroundjob, auch für wmi.
start-job -scriptblock { dir }
get-wmiobject win32_operatingsystem -computername (get-content allservers.txt) -asjob
invoke-command -command { get-process } -computername (get-content .\allservers.txt ) -asjob -jobname MyRemoteJob
Wie können die Backgroundjobs aufgelistet werden und die Resultate angezeigt werden?
Was ist dabei zu beachten?
mit get-job werden die jobs und mit "receive-job -id 2" die Ergebnisse angezeigt. Von get-job kann auch nach receive-job gepipet werden.
Es werden auch die Output von den Childjobs angezeigt.
Ohne die -keep Option werden die Output danach gelöschte und können nicht mehr abgerufen werden. Mit CliXML können die Output kopiert werden.
Die Ergebnisse sind deserilized.
"get-job -name job2 | format-list *"kann viele Child Jobs zurückliefern. Wie können diese besser dargestellt werden?
get-job -id 1 | select-object -expand childjobs
Wie können jobs enfernt werden bei welchen die Outputs bereits angezeigt wurden?
get-job | where { -not $_.HasMoreData } | remove-job
Mit welchen 3 Task kann ein scheduled Task eingerichtet werden?
Wie sieht das command aus?
Register-ScheduledJob -Name DailyProcList -ScriptBlock { Get-Process }
-Trigger (New-JobTrigger -Daily -At 2am)
-ScheduledJobOption (New-ScheduledJobOption -WakeToRun -RunElevated)