Aceptar valor de la function Powershell de la tubería

Me gustaría crear un script que le diga al usuario si PSRemoting está habilitado en múltiples máquinas remotas. Esto es lo que tengo hasta ahora:

function Test-PSRemoting { Param( [Parameter(Mandatory=$True, ValueFromPipeline=$True)] [string[]] $ComputerName, [string] $Cnetworkingential) $file = Read-Host "Enter file location for all error details: " try { $result = Invoke-Command -ComputerName $ComputerName -Cnetworkingential $Cnetworkingential { 1 } -ErrorAction SilentlyContinue -ErrorVariable Problem If ($Problem){ $result = 0} } catch { $result = 0} If ($result -eq 1){ write-host "PSRemoting is enabled on: " $ComputerName } else { write-host "PSRemoting is not enabled/working on: " $ComputerName $Problem | Out-File $file -Append} } 

La function funciona perfectamente si sólo especifico una computadora:

 Test-PSRemoting -ComputerName Server1 - Cnetworkingentials Admin 

Sin embargo, no puedo conseguir que funcione la function si especifico varios equipos:

 Test-PSRemoting -ComputerName Server1, Server2 - Cnetworkingentials Admin Server1, Server2 | Test-PSRemoting -Cnetworkingentials Admin 

2 Solutions collect form web for “Aceptar valor de la function Powershell de la tubería”

Utilizaría el process {} bloque en este caso (también contesta su comentario sobre porqué él estaba comprobando solamente Server2).

 function test-ps { param( [Parameter(ValueFromPipeline=$true)] [string[]] $CN ) process{ Write-Host $CN "h" } } 'test1','test2' | test-ps 

http://ss64.com/ps/syntax-function-input.html

Pruebe lo siguiente, los comentarios a continuación señalan los puntos key.

 function Test-PSRemoting { [CmdletBinding()] param ( [Parameter(Mandatory = $True, ValueFromPipeline = $True)] [string[]]$ComputerName, [Parameter(Mandatory = $False)] [System.Management.Automation.PSCnetworkingential]$Cnetworkingential = (Get-Cnetworkingential), [Parameter(Mandatory = $True)] [String]$OutFile ) process { # Pass computer name along the pipeline to allow for more then one. $ComputerName | % ` { $pcName = $_; $problem = $Null; try { $result = Invoke-Command -ComputerName $pcName -Cnetworkingential $Cnetworkingential { 1 } -ErrorAction SilentlyContinue -ErrorVariable problem; if ($problem -eq $Null -and $result -eq 1) { # Use Write-Verbose instead. Test-* commands are meant to return true/false. # But additional status can be viewed by adding the -Verbose parameter to Test-PSRemoting. ie Test-PSRemoting -Verbose Write-Verbose "PSRemoting is enabled on: $pcName"; return $True; } else { Write-Verbose "PSRemoting is not enabled/working on: $pcName"; $problem | Out-File $OutFile -Append; return $False; } } catch { return $False } } } } 

Los puntos key son:

  • Uso de $ComputerName | para permitir el uso de Test-PSRemoting -ComputerName Server1,Server2 al manejar la lógica condicional por nombre de equipo especificado. Invoke-Command maneja naturalmente varios nombres de computadora, pero sus sentencias if no.
  • Movió el $file a $OutFile lugar de Read-Host y marcó como parámetro obligatorio para forzar la input. Dejar Read-Host en un process { } bloque significaría que la ruta del file se solicita varias veces si Server1,Server2 | Test-PSRemoting Se utiliza Server1,Server2 | Test-PSRemoting . También tiene la ventaja de poder ser pasado como un parámetro en lugar de typescript manualmente cada vez.
  • Movió la salida verbosa a Write-Verbose lugar de Write-Host . Los commands Test- * deben devolver True / False en lugar de una cadena. Use -Verbose para ver la salida detallada. Además, usted podría cambiar la Write-Verbose "PSRemoting is not enabled/working on: $pcName"; línea a una Write-Warning lugar.
  • Ejecutar secuencia de commands por lotes que muestra salida y salida de grabación a un file
  • ¿Utilizando PHP para Linux Admin?
  • Cómo criptar una secuencia de commands sh en Linux Environnement?
  • Supervisión de performance remoto para Solaris y Windows
  • ¿Qué personajes si cat'd va a estropear mi terminal y hacer una tonelada de ruido?
  • Cómo expandir esta propiedad en PowerShell
  • script init.d tomcat6
  • Ubuntu bash scripting con commands raíz
  • Necesita ayuda con el error Powershell "El lado izquierdo de un operador de asignación ..."
  • Retener session SSH en guión bash
  • ¿Cómo usar un file de configuration (ini, conf, ...) con una secuencia de commands Powershell? ¿Es posible?
  • script para eliminar los files temporales durante el cierre de session
  • Script de Linux para encontrar la diferencia de time y enviar un correo electrónico si es necesario
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.