it-swarm-es.com

Características ocultas de PowerShell

¿Cuáles son las características ocultas de PowerShell ?

6
tsilb

Moviendo la mía a una respuesta, así que no me siento mal, lo que hace que esto sea un commwiki.

Foreach Loops:

PS C:\> foreach ($a in "a","b","c") { write $a }
a
b
c

Cambiado a un camino UNC:

PS C:\> cd \\kcws\c$
PS Microsoft.PowerShell.Core\FileSystem::\\kcws\c$>

Obtener servicios de ejecución:

PS C:> GET-SERVICIO | donde {$ _. Estado -eq "en ejecución"}

Status Name DisplayName
------ ---- -----------
Running AeLookupSvc Application Experience
Running Appinfo Application Information
Running AudioEndpointBu... Windows Audio Endpoint Builder
Running Audiosrv Windows Audio
[...]
0
tsilb

Haga sus propias funciones personalizadas y guárdelas en su perfil. Puede construir toneladas de funciones útiles sin tener que volver a pensar todo cada vez que aparece un problema similar.

Edite su perfil:

PS C:\> notepad $profile
2
KdgDev

Accede a cualquier clase .NET usando Add-Type -Assembly Con el nombre de ensamblaje, o Add-Type -Path Con la ruta DLL y luego usando Sintaxis como [Namespace.Dotted.ClassName+NestedClass]::StaticMethod() para crear un New-Object Namespace.Dotted.ClassName o invocar métodos/campos estáticos en los tipos.

2
Jaykul

Guarde los archivos con diferentes codificaciones que UTF-16 en ISE.

El PowerShell ISE por defecto para guardar todos los archivos como "Unicode Big Endian" (UTF-16) codificando. El siguiente código creará un elemento de menú en el ISE y asignará una tecla de acceso rápido (predeterminado, Ctrl-Shift + E) para guardar el archivo en la pestaña PowerShellise actual utilizando una codificación específica que no sea UTF-16. Lo configuré en UTF-8, pero podría usar ASCII o algo más si lo desea.


$iseProfile = $profile -replace '_profile','ISE_profile'
$addMenuCmdStr = '$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Add("_Save as UTF8",{$psIse.CurrentFile.Save([System.Text.Encoding]::UTF8)},"Ctrl+Shift+E")'
add-content $iseProfile -value $addMenuCmdStr 
ise

Este truco es útil para evitar ciertos problemas con los scripts de PowerShell, tales como:

  • Subversion (posiblemente otros sistemas CVS) agrega archivos .PS1 al repositorio como texto binario y no como texto simple, no le permitirá "diff" sus scripts porque son "binarios", o genera un error que se puede agregar un archivo Porque es "tipo MIME binario". Cambiar la codificación a UTF-8 debería permitir que sus archivos se agreguen al repositorio con SVN: tipo MIME-TIPO/PLANTE DE TEXTO y permite que las funciones difieren.

  • El código de firma usando Set-Authenticodesignature falla para algunos archivos y no otros

  • Probablemente otros casos fueron trabajos de operaciones de contenido de archivos para algunos archivos y no otros, a menudo, sin ninguna razón aparente, pero un síntoma es que solo los archivos creados con el ISE tienen el problema.

1
Ryan Fisher

SPLATTING. Puede definir un montón de argumentos en un hashtable, y luego usarlo como los parámetros de una función.

$sendMailParameters = @{
    To = '[email protected]'
    From  ='[email protected]'
    Subject = 'Something'
    Body = 'Some stuff'
    BodyAsHtml = $true
}

Send-MailMessage @sendMailParameters
1
Start-Automating

Esto es más de una molestia no obvia, pero una vez escribí un script para producir un archivo CSV como entrada para un ejecutable más antiguo, Ofiller.exe, que se usa con los firewalls de Punto de control.

Estaba usando Redirección de salida: Script.ps1 > outfile.csv

Mi archivo CSV creado por PowerShell no funcionó, donde mi archivo CSV de prueba escrito a mano funcionó bien, a pesar de que los dos archivos difieren de manera idéntica. Solo cuando miré el tamaño de los archivos, me di cuenta de que era un Unicode vs ASCII problema; El CSV de PowerShell era el doble de grande.

Tubiendo mi salida a | Out-File -format ASCII -name outfile.csv En lugar de la redirección de STdout barata y alegre resolvió el problema.

0
AndyN