2013-08-15 1 views
1

루프를 통해 반복 할 때마다 (선택한 서비스 배열) 서버 이름, 서비스 이름, 서비스 상태 및 서비스 시작 이름과 같은 각 서비스에 대해 4 개의 값을 수집하는 스크립트를 작성하고 있습니다.out-file 형식

각 반복마다 4 개의 값을 외부 파일 (txt, svc 또는 html)에 출력하여 각 값이 자체 열에 정렬되도록하고 싶습니다. 현재 각 열의 값을 정렬하기 위해 탭을 사용하지만 일부 서비스 이름이 훨씬 길거나 짧아서 열 정렬을 망쳐 버리기 때문에 제대로 작동하지 않습니다. 어떤 다른 방법 그렇게 모든 열을 아래

내가 현재 PowerShell을 사용하여, TXT 파일

ForEach($service in services) 
    $startname = $service.startname 
    $state = $service.state 
    $servicename = $service.name 
    write-output "$server `t $servicename `t $state `t $startname is current" | out-file -append $ScriptDirectory 
+0

당신은 정말 어떤 형식을할까요 ... 즉 다른 곳에서 정의 된 가정한다? TXT, CSV 및 HTML은 모두 출력 형식 요구 사항이 크게 다릅니다. – alroc

+0

TXT는 모든 열을 정확하게 정렬 할 수있는 한 괜찮습니다. –

답변

1

에 출력 형식 대신에 여러 변수를 사용하는 방법에 대한 내 스크립트의 조각입니다 제대로 정렬 제안 할 출력물을 저장할 개체. 이런 식으로 뭔가 : 당신은 열이 최종 출력에 대해 원하는 것이 올바른 순서에 보장하기 위해 체인에서 선택 - 객체를 추가해야 할 수 있습니다

ForEach($service in $services) { 
    New-Object PSObject -Property @{ 
    StartName = $service.startname 
    State = $service.state 
    ServiceName = $service.name 
    } 
} | Out-File $ScriptDirectory 

.

+0

사용자 (및 OP)는'서비스 '앞에'$'가 필요합니다. – alroc

0

변수를 유지하려면 다음 문자열 형식을 사용하여 문자열의 변수를 균등하게 배치하십시오.

ForEach($service in services){ 
    $startname = $service.startname 
    $state = $service.state 
    $servicename = $service.name 
    "{0,-20} | {1,-20} | {2,-20} | {3,-20}" -f $server,$servicename,$state,$startname ` 
               | Out-File -append $ScriptDirectory 
} 
0

그것은 코드가 약간 불분명 보인다 무슨 당신이 개체의 속성 중 일부는 Get-Service 돌아 서면으로 존재하지 않는 찾고과 : 간격 아래의 예에서 각 값 사이에 20 자입니다 불완전한. 하지만 의도로 추측 촬영 :

$servers = @("server1","server2"); 
$services = get-service -computername $servers; 

$svcCollection = @(); 
ForEach($service in $services) { 
    $svccollection+=New-Object PSObject -Property @{ 
    Servername = $service.MachineName; 
    StartName = $service.servicename; 
    State = $service.Status; 
    ServiceName = $service.DisplayName; 
    } 
} 

# Various output formats 
$svccollection|ConvertTo-Html|Out-File -path Services.html; # Create a full HTML file 
$svcCollection|Export-Csv -NoTypeInformation -Path Services.csv; # Create a "traditional" CSV file 
$svcCollection|Export-Csv -Delimiter "`t" -Path Services-tab.csv; # Create a tab-delimited CSV file 
$svcCollection|ConvertTo-Xml|Out-File -path Services.xml; # Create an XML file 
$svcCollection|ConvertTo-Json|Out-File -path Services.js; # Create a JSON object (v3 only) 
2

방금 ​​(즉,이 CSV 또는 탭으로 구분을 만들기위한 요구 사항이 있거나없는 멋지게 형식의 방법으로 텍스트로 결과를 덤프하려면 "사람이 읽기 쉽다"이외의 다른 것), 그런 다음 Format-Table -AutoSize을 사용하십시오.

AutoSize 정확히 무엇을 원하는지 - 출력하는 모든 속성의 길이를 검사 한 다음 가능한 한 많이 표시되도록 동적으로 열 너비를 조정합니다.

$server이 어디에서 오는지 당신은 설명하지 않습니다, 나는

$services ` 
| Format-Table -AutoSize @{N='Server';E={$server}},StartName,State,Name ` 
| Out-String ` 
| Out-File results.txt 
관련 문제