Toon posts:

[Powershell]Invoke-command output filtering / formatting

Pagina: 1
Acties:

Verwijderd

Topicstarter
In een PS scriptje open ik een PSRemoting session en voer ik het volgende commando uit:
code:
1
$Regstate = Invoke-Command -Session $S -ScriptBlock {(Get-BrokerMachine -MachineName Domain\MachineName).RegistrationState}


Vervolgens schrijf ik $Regstate met Out-File naar een txt file. Zie onderstaande afbeelding voor de output.

Afbeeldingslocatie: http://s4.postimg.org/hactfpydl/Output.jpg

Wat ik eigenlijk wil, is dat puur de value van RegistrationState in de text file beland. Dus alleen de tekst 'Registered' of 'Unregistered'.

Heeft iemand een idee hoe ik dit voor elkaar kan krijgen?

  • Grodor
  • Registratie: Oktober 2001
  • Laatst online: 16-10 19:33
Kijk eens naar Select-Object. Daarmee kun je selectief filteren.

Dus in jouw geval:
PowerShell:
1
$Regstate = Invoke-Command -Session $S -ScriptBlock {(Get-BrokerMachine -MachineName Domain\MachineName).RegistrationState} | Select-Object RegistrationState

No coffee, no nothing!


Verwijderd

Topicstarter
@Cig: bedankt voor je reactie

Ik ben even wat gaan stoeien met Select-Object. De onderstaande code leverde dezelfde output als eerder, minus de value van RegistrationState :)
code:
1
$Regstate = Invoke-Command -Session $S -ScriptBlock {(Get-BrokerMachine -MachineName Domain\MachineName).RegistrationState} | Select-Object RegistrationState


Met het onderstaande blokje code heb ik in ieder geval de twee overbodige kolommen eruit gefilterd
code:
1
2
3
4
5
$Regstate = Invoke-Command -Session $S -ScriptBlock {Get-BrokerMachine -MachineName Domain\MachineName}

Exit-PSSession

$Regstate | Select-Object RegistrationState | Out-File C:\Scripts\Regstates\MachineName.txt


De txt file begint met twee lege regels en daaronder:

RegistrationState
-----------------
Unregistered

Nu dus nog een manier weten te vinden om de twee lege regels, de titel RegistrationState en de lijn weg te krijgen :)
Ik heb wat getest met format-list en format-custom maar daar kreeg ik het nog niet mee voor elkaar.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ter lering ende vermaak; ik heb het voor elkaar gekregen met Findstr. Onderstaande code zorgt voor een txt file met louter de tekst 'Registered' of 'Unregistered'. Nogmaals dank @Cig.

code:
1
2
3
4
5
$Regstate = Invoke-Command -Session $S -ScriptBlock {Get-BrokerMachine -MachineName Domain\MachineName}

Exit-PSSession

$Regstate | Select-Object RegistrationState | Findstr "egister" | Out-File C:\Scripts\Regstates\MachineName.txt

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 11:27
Dat kan netter!
Je zou het ook zo kunnen doen:

code:
1
$Regstate.RegistrationState | out-file c:\bestandje.txt

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Craven: bedankt! Dat is inderdaad netter :)

Acties:
  • 0 Henk 'm!

  • brid
  • Registratie: Januari 2001
  • Laatst online: 29-07-2024

brid

Onze excuses voor het ongemak

Je kan ook de select uit voeren met een -expandproperty dan krijg je alleen de waardes terug
code:
1
2
3
4
5
6
7
8
9
10
11
12
PS G:\> get-childitem d:\temp\*.txt | select name

Name
----
dvb2.txt
Logfile_test.txt


PS G:\> get-childitem d:\temp\*.txt | select -ExpandProperty name
dvb2.txt
Logfile_test.txt
PS G:\>


Of de echt nasty methode
code:
1
get-childitem d:\temp\*.txt | foreach {add-content -value $_.name -path d:\temp\result.txt}

[ Voor 18% gewijzigd door brid op 20-02-2015 16:10 ]

DIY NAS, Hoofd PC
Unchain your pc/laptop, buy a SSD!!!!!

Pagina: 1