update powershell windows-7 windows-server-2008 windows-server-2003

update - Múltiples-y-en la declaración de PowerShell Where-Object



powershell windows 7 download (2)

Al ajustar sus comparaciones en {} en su primer ejemplo, está creando ScriptBlocks; por lo que el intérprete de PowerShell lo ve como Where-Object { <ScriptBlock> -and <ScriptBlock> } . Como el operador -and opera en valores booleanos, PowerShell convierte los ScriptBlocks en valores booleanos. En PowerShell, todo lo que no esté vacío, cero o nulo es verdadero. La declaración luego se ve como Where-Object { $true -and $true } que siempre es verdadero.

En lugar de usar {} , usa paréntesis () .

También desea usar -eq lugar de -match ya que la coincidencia usa -match regulares y será cierto si el patrón se encuentra en cualquier parte de la cadena (intente: ''xlsx'' -match ''xls'' ).

Invoke-Command -computername SERVERNAME { Get-ChildItem -path E:/dfsroots/datastore2/public | Where-Object {($_.extension -eq ".xls" -or $_.extension -eq ".xlk") -and ($_.creationtime -ge "06/01/2014")} }

Una mejor opción es filtrar las extensiones en el comando Get-ChildItem .

Invoke-Command -computername SERVERNAME { Get-ChildItem -path E:/dfsroots/datastore2/public/* -Include *.xls, *.xlk | Where-Object {$_.creationtime -ge "06/01/2014"} }

PS H:/> Invoke-Command -computername SERVERNAME { Get-ChildItem -path E:/dfsroots/datastore2/public} | Where-Object {{ $_.e xtension-match "xls" -or $_.extension-match "xlk" } -and { $_.creationtime -ge "06/01/2014"}}

Arriba está mi ejemplo de código. Estoy intentando ejecutar de forma remota este código de PowerShell en mi servidor de archivos y hacer que devuelva todos los archivos .xls y .xlk con una fecha de creación posterior al 6/1/2014. Cuando ejecuto este código, comienza a escupir todas las carpetas en esa ubicación remota. Si solo comparo dos cosas así:

PS H:/> Invoke-Command -computername SERVERNAME { Get-ChildItem -path E:/dfsroots/datastore2/public} | Where-Object { $_.extension-match "xls" -and $_.creationtime -ge "06/01/2014"}

Solo se muestran los archivos xls creados en o después de esa fecha. ¿Que está pasando aqui? ¿Necesito usar otra cosa que no sea nido -and / -or declaraciones?


Estás utilizando llaves cuando debes usar paréntesis.

Una declaración donde se mantiene dentro de un bloque de secuencia de comandos, que se define mediante espacios curvos { } . Para aislar / envolver sus pruebas, debe usar paréntesis () .

También sugeriría tratar de hacer el filtrado en la computadora remota. Tratar:

Invoke-Command -computername SERVERNAME { Get-ChildItem -path E:/dfsroots/datastore2/public | Where-Object { ($_.extension -eq "xls" -or $_.extension -eq "xlk") -and $_.creationtime -ge "06/01/2014" } }