Печать свойств объекта в Powershell
при работе в интерактивной консоли, если я определяю новый объект и присваиваю ему некоторые значения свойств следующим образом:
$obj = New-Object System.String
$obj | Add-Member NoteProperty SomeProperty "Test"
затем, когда я ввожу имя своей переменной в интерактивное окно Powershell дает мне сводку свойств и значений объекта:
PS C:demo> $obj
SomeProperty
------------
Test
Я в основном хочу сделать именно это, но изнутри функции в скрипте. Функция создает объект и устанавливает некоторые значения свойств, и я хочу, чтобы он распечатал сводку значения объектов в окне Powershell перед возвратом. Я попытался использовать Write-Host в функции:
Write-Host $obj
но это просто вывести тип объекта не резюме:
System.Object
как моя функция может выводить сводку значений свойств объекта в окно Powershell?
5 ответов:
попробуйте это:
Write-Host ($obj | Format-Table | Out-String)
или
Write-Host ($obj | Format-List | Out-String)
мое решение этой проблемы было использовать $ () sub-expression block.
Add-Type -Language CSharp @" public class Thing{ public string Name; } "@; $x = New-Object Thing $x.Name = "Bill" Write-Output "My name is $($x.Name)" Write-Output "This won't work right: $x.Name"
выдает:
My name is Bill This won't work right: Thing.Name
чтобы распечатать свойства и значения объекта в Powershell. Ниже примеры работать хорошо для меня.
$бассейн = Вам-товар "IIS:\AppPools.NET В4.5"
$pool / Get-Member
TypeName: Microsoft.IIs.PowerShell.Framework.ConfigurationElement#system.applicationHost/applicationPools#add Name MemberType Definition ---- ---------- ---------- Recycle CodeMethod void Recycle() Start CodeMethod void Start() Stop CodeMethod void Stop() applicationPoolSid CodeProperty Microsoft.IIs.PowerShell.Framework.CodeProperty state CodeProperty Microsoft.IIs.PowerShell.Framework.CodeProperty ClearLocalData Method void ClearLocalData() Copy Method void Copy(Microsoft.IIs.PowerShell.Framework.ConfigurationElement ... Delete Method void Delete() ...
$бассейн | Выберите объект -собственность * # можно опустить -недвижимость
name : .NET v4.5 queueLength : 1000 autoStart : True enable32BitAppOnWin64 : False managedRuntimeVersion : v4.0 managedRuntimeLoader : webengine4.dll enableConfigurationOverride : True managedPipelineMode : Integrated CLRConfigFile : passAnonymousToken : True startMode : OnDemand state : Started applicationPoolSid : S-1-5-82-271721585-897601226-2024613209-625570482-296978595 processModel : Microsoft.IIs.PowerShell.Framework.ConfigurationElement ...
никогда не используйте Write-Host.
правильный способ вывода информации из командлета или функции PowerShell-это создание объекта, содержащего ваши данные, а затем запись этого объекта в конвейер с помощью Write-Output.
в идеале ваш скрипт будет создавать свои объекты (
$obj = New-Object -TypeName psobject -Property @{'SomeProperty'='Test'}
), то просто сделатьWrite-Output $objects
. Вы бы передали вывод вFormat-Table
.PS C:\> Run-MyScript.ps1 | Format-Table
они действительно должны называть PowerShell PowerObjectandPipingShell.