usar tutorial script como commands comandos powershell

script - powershell tutorial



Imprimir las propiedades del objeto en Powershell (5)

Cuando trabajo en la consola interactiva si defino un nuevo objeto y le asigno algunos valores de propiedad de esta manera:

$obj = New-Object System.String $obj | Add-Member NoteProperty SomeProperty "Test"

Luego, cuando escribo el nombre de mi variable en la ventana interactiva, Powershell me brinda un resumen de las propiedades y valores del objeto:

PS C:/demo> $obj SomeProperty ------------ Test

Básicamente quiero hacer esto, pero desde dentro de una función en un script. La función crea un objeto y establece algunos valores de propiedad y quiero que imprima un resumen de los valores del objeto en la ventana de Powershell antes de volver. Intenté usar Write-Host dentro de la función:

Write-Host $obj

Pero esto solo muestra el tipo de objeto, no el resumen:

System.Object

¿Cómo puedo hacer que mi función muestre un resumen de los valores de propiedad del objeto a la ventana de Powershell?


Mi solución a este problema fue usar el bloque de subexpresión $ () .

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"

Da:

My name is Bill This won''t work right: Thing.Name


Para imprimir las propiedades y los valores del objeto en Powershell. A continuación, los examples funcionan bien para mí.

$ pool = Get-Item "IIS: / AppPools.NET v4.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() ...

$ pool | Select-Object -Property * # Puede omitir -Property

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 ...


Prueba esto:

Write-Host ($obj | Format-Table | Out-String)

o

Write-Host ($obj | Format-List | Out-String)


Consejo # 1

Nunca use Write-Host.

Consejo # 12

La forma correcta de generar información desde un cmdlet o función de PowerShell es crear un objeto que contenga sus datos y luego escribir ese objeto en la tubería mediante el uso de Write-Output.

-Don Jones: maestro de PowerShell

Lo ideal sería que su script creara sus objetos ( $obj = New-Object -TypeName psobject -Property @{''SomeProperty''=''Test''} ) luego haga un Write-Output $objects . Debería canalizar la salida a Format-Table .

PS C:/> Run-MyScript.ps1 | Format-Table

Realmente deberían llamar a PowerShell PowerObjectandPipingShell.


# Json to object $obj = $obj | ConvertFrom-Json Write-host $obj.PropertyName