MyCustomPSObject
파일 을 생성하고 로드하여 형식을 정의할 수 있다는 것을 알고 있습니다 MyCustomPSObject.format.ps1xml
.
그리고 나는 보았다사람들은 .ps1 스크립트 파일 내부에서 즉시 이 형식 파일 생성을 수행합니다.(여기서도 시작문장 아래에 나열"그래서 저는 Get-ProcessTotal이라는 고급 PowerShell 함수를 작성했습니다."145번째 줄부터.)
그리고 제가 이해한 바로는,해당 서식 파일의 첫 번째 항목이 기본값으로 사용됩니다.
외부 파일을 생성하는 것이 나에게는 번거로운 것 같습니다.
질문:
- 외부 파일을 생성하고 로드하지 않고 이를 수행할 수 있는 방법이 있습니까?
내가 원하는 건"테이블로 출력하세요". (기본적으로 실행 Format-Table
하지만 그 과정에서 객체성을 잃지 않습니다.)
관련 질문
스크립트 Get-VSSWriters.Current-Version.ps1
문제의 스크립트는 다음과 같습니다.
# This script lists VSS writers.
# The original, uncustomized, version was taken from here:
# https://gallery.technet.microsoft.com/scriptcenter/Powershell-ScriptFunction-415e9e70
$RawWriters = Invoke-Command -ErrorAction Stop -ScriptBlock {
#Requires -RunAsAdministrator
return (VssAdmin List Writers)
}
# We don't really care about "WriterID" and "WriterInstanceID", so we leave them out of the default
# display set. (Approach copied from here:
# https://learn-powershell.net/2013/08/03/quick-hits-set-the-default-property-display-in-powershell-on-custom-objects/ )
$defaultDisplaySet = 'WriterEnum', 'WriterName', 'StateID', 'StateDesc', 'LastError'
$defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet', [string[]]$defaultDisplaySet)
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet)
$Writers = @()
for ($i=0; $i -lt (($RawWriters.Count)-3)/6; $i++) {
$Writer = New-Object -TypeName psobject
$Writer.PSObject.TypeNames.Insert(0, 'MyVSSWriter')
$Writer | Add-Member MemberSet PSStandardMembers $PSStandardMembers
$Writer| Add-Member "WriterEnum" ($i + 1)
# Note: We split on both single quotes and double quotes.
# That way this script will work for both:
# * the English language version of Windows (>>Writer name: 'WMI Writer'<<)
# * the German version of Windows (>>Verfassername: "WMI Writer"<<)
$Writer| Add-Member "WriterName" $RawWriters[($i*6)+3].Split("`"'")[1]
$Writer| Add-Member "WriterID" $RawWriters[($i*6)+4].Split('{}')[1]
$Writer| Add-Member "WriterInstanceID" $RawWriters[($i*6)+5].Split('{}')[1]
$Writer| Add-Member "StateID" $RawWriters[($i*6)+6].Split('[]')[1]
$Writer| Add-Member "StateDesc" $RawWriters[($i*6)+6].Split('[]')[2].SubString(1)
$Writer| Add-Member "LastError" $RawWriters[($i*6)+7].Split(':')[1].Substring(1)
$Writers += $Writer
}
$Writers
실제 출력
PS C:\> .\Get-VSSWriters.Current-Version.ps1 | select -first 1
WriterEnum : 1
WriterName : Task Scheduler Writer
StateID : 1
StateDesc : Stable
LastError : No error
원하는 출력
PS C:\> .\Get-VSSWriters.Updated-Version.ps1 | select -first 1
WriterEnum WriterName StateID StateDesc LastError
---------- ---------- ------- --------- ---------
1 Task Scheduler Writer 1 Stable No error
( 와 동일해야 합니다 .\Get-VSSWriters.Current-Version.ps1 | select -first 1 | Format-Table
.)