Denne tråd er over 6 måneder gammel
Er du sikker på, at du har noget relevant at tilføje?
Export-csv(?) powershellAf Super Nørd Galahat | 05-10-2016 13:14 | 1770 visninger | 15 svar, hop til seneste
Hejsa..
Jeg har et afsnit i et større powershell script, noget som jeg gerne vil have eksporteret, om det er til csv, xml eller txt er sådan set ligemeget, vil bare gerne have at det står ligeså pænt i filen, som det gør på skærmen.
ser således ud:
$CIs = Get-Content -path C:\Tempt\CIsOnline.csv
foreach ($CI in $CIs) {
Get-Service -ServiceName 'wuauserv', 'bits', 'winmgmt', 'ccmexec' -ComputerName $CI | select name, status, machinename | sort machinename | format-table -AutoSize
}
Outputtet i scriptet ser sådan her ud på skærmen:
Name Status ?MachineName
---- ------ -----------
BITS Running
CcmExec Running
Winmgmt Running
wuauserv Running
(det står selvf lige under hinanden - jeg har fjernet navn)
og det vil jeg gerne have smidt ud i en fil, som gør det lidt lettere at overskue med den mængde CI's jeg har at gøre med.
Har prøvet en helt masse men uden at opnå det resultat jeg gerne vil.
Jeg har overvejet om man kan smide outputtet over i en $ServiceStatus = *SCRIPTET*
Også lave en export-csv $ServiceStatus, men er ikke helt skarp nok i PS til at knække den, og google hjælper mig ikke meget med de søgninger jeg har haft held med.
//Gala --
Happy wife, Happy life!
$CIs = Get-Content -path C:\TEMP\pstest.csv
$status = foreach ($CI in $CIs) {
Get-Service -ServiceName 'wuauserv', 'bits', 'winmgmt', 'ccmexec' -ComputerName $CI | select name, status, machinename | sort machinename | format-table -AutoSize
}
$status | out-file C:\TEMP\test.txt -- Fik ikke lige skrevet forklaringen i først post.
foreach loopet understøtter ikke pipelines, så derfor skal du smide outputtet i en variable. -- Sidst redigeret 05-10-2016 13:55 #1+2 fedt. prøver lige med det samme! -- Happy wife, Happy life! I stedet for outfile ville jeg bruge export-csv. Det får du et pænere resultat af :)
$status | export-csv -Delimiter ';' 'c:\test\test.csv' -- Gæstebruger, opret dit eget login og få din egen signatur. Hmm, det virker ikke når jeg smider $Status = foran,
jeg får
Get-Service : Cannot open Service Control Manager on computer 'XX'. This operation might require other privileges.
At line:3 char:1
+ Get-Service -ServiceName 'wuauserv*', 'bits*', 'winmgmt*', 'ccmexec*' -ComputerN ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-Service], InvalidOperationException
+ FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetServiceCommand
Men det er ikke et spørgsmål om rettigheder, for fjerner jeg $status = så ruller det lige igennem.
Og jeg har også læse og skrive rettigheder i den folder jeg gerne vil smide min csv fil ud. -- Happy wife, Happy life! Du kunne også redirect stdout til en fil ?
mitprogram.exe > output.txt 2>&1
således behøves man ikke nødvendigvis at tilføje skriv-til-en-fil funktionalitet til sit program/script. -- Freelance PHP udvikler - Send PM for mine kontaktoplysninger. #6 hmm, det er jeg ikke sikker på jeg forstår.
Kan du linke til noget jeg måske kunne læse lidt op på? -- Happy wife, Happy life! #5 Du mangler rettigheder på de servere du looper igennem.
Den CSV fil du looper igennem, prøv blot at have 1 server deri - hvor du så kører scriptet.
Den måde #1 gør det på er nok det tætteste du kommer på "pænt PowerShell". -- Intel 5930k w Noctua NH-D15, MSI Game G6 GTX 980ti, ASRock X99M Extreme 4, Samsung m2 512, Bitfinex Prodigy w Noctua NF-P12 PWM, Corsair 860i PSU --
Sidst redigeret 05-10-2016 20:11 #8 Hvorfor mangler jeg så ikke rettigheder hvis ikke jeg har $Status = foran min funk i loopet?
Jo "pænere" det bliver jo bedre -- Happy wife, Happy life! #9 Challenge accepted :) -- Intel 5930k w Noctua NH-D15, MSI Game G6 GTX 980ti, ASRock X99M Extreme 4, Samsung m2 512, Bitfinex Prodigy w Noctua NF-P12 PWM, Corsair 860i PSU #9
Din CSV fil med servere skal se sådan her ud:
ComputerName
server01
server02
Dit PowerShell script skal se således ud:
$CIs = Import-Csv "c:\temp\computers.csv"
$ServiceStatus = foreach ($CI in $CIs.ComputerName)
{
Get-Service -ServiceName "Dhcp","Dnscache" -ComputerName $CI | select name, status, machinename | sort machinename | format-table -AutoSize
}
$ServiceStatus | Out-File c:\temp\ServiceStatus.txt
Det giver en tekstfil der ser sådan her ud:
Name Status MachineName
---- ------ -----------
Dhcp Running localhost
Dnscache Running localhost
Name Status MachineName
---- ------ -----------
Dhcp Running server01
Dnscache Running server01 -- Intel 5930k w Noctua NH-D15, MSI Game G6 GTX 980ti, ASRock X99M Extreme 4, Samsung m2 512, Bitfinex Prodigy w Noctua NF-P12 PWM, Corsair 860i PSU --
Sidst redigeret 05-10-2016 22:16 #11 mmh.. Lad mig lige prøve det en gang :)'
Der skal simpelthen være "ComputerName" i den første linie? - hvad har det af betydning. -- Happy wife, Happy life! #12 Højst sandsynligt positional parameters. Som betyder at Get-Whatever forventer -ComputerName som værende det første parameter -- /Niels min løsning i #1 virkede på mit lab.
Jeg havde bare 3 server navne i csv filen
server1
server2
server3
Jeg er domain admin, så det kan selfølgelig spille en rolle.
Det hele køres på en windows 10 pc med powershell version
PS O:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 0 10586 494 -- #13 okay..
#14 jeg er også domain admin. Må lige prøve at kigge nærmere på.
Tak for la hjælpen igen. Kan være jeg vækker liv til tråden igen såfremt det skulle blive aktuelt :) -- Happy wife, Happy life!
Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.
Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.
Opret bruger | Login
|
Du skal være logget ind for at tilmelde dig nyhedsbrev.
Hvilken udbyder har du til internet? 425 personer har stemt - Mit energiselskab (Ewii f.eks) 12%
|