繁体   English   中英

调用命令不从我的Get-ChildItem返回任何内容

[英]Invoke-Command doesn't return anything from my Get-ChildItem

该脚本不向$ file参数返回任何内容。 如果我在服务器本身上没有Invoke-Command的情况下执行此操作,则会找到文件。

远程示例:

$file =Invoke-command -ComputerName $server -Credential $cred -ArgumentList $fileName -scriptblock{param($fileName)(Get-ChildItem -Recurse -Force "C:" -ErrorAction SilentlyContinue | Where-Object { ($_.PSIsContainer -eq $false) -and  ( $_.Name -eq $fileName) })}

write-host $file
write-host $file.PSPath

if($file -ne $null -or $file -ne ""){
        $path= $file.PSPath
    }
return $path

本地示例:

$file = Get-ChildItem -Recurse -Force "C:" -ErrorAction SilentlyContinue | Where-Object { ($_.PSIsContainer -eq $false) -and  ( $_.Name -eq $fileName) }
write-host $file
write-host $file.PSPath
if($file -ne $null -or $file -ne ""){
        $path= $file.PSPath
    }
return $path

我相信您的问题出在您的Get-ChildItem语句上。 这是一个示例,可以帮助您进行分类:

PS C:\Temp> Get-ChildItem 'C:'


    Directory: C:\Temp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----           3/9/18   6:42 AM              0 file


PS C:\Temp> Get-ChildItem -Path 'C:\'


    Directory: C:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----          12/1/17   9:30 AM                PerfLogs
d-r---           3/7/18   2:52 PM                Program Files
d-r---          2/26/18   5:12 PM                Program Files (x86)
d-----           3/9/18   6:42 AM                Temp
d-r---          12/1/17  11:30 AM                Users
d-----           3/6/18  11:46 AM                Windows


PS C:\Temp>

另外,请记住,作为PowerShell的3版本,你可以使用-Directory-File ,而不是一个Where-Object PSIsContainer逻辑比较:

PS C:\Temp> Get-ChildItem -Path 'C:\' -File
PS C:\Temp> Get-ChildItem -Path 'C:\Temp\' -File


    Directory: C:\Temp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----           3/9/18   6:42 AM              0 file


PS C:\Temp> Get-ChildItem -Path 'C:\Temp\' -Directory
PS C:\Temp> Get-ChildItem -Path 'C:\' -Directory


    Directory: C:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----          12/1/17   9:30 AM                PerfLogs
d-r---           3/7/18   2:52 PM                Program Files
d-r---          2/26/18   5:12 PM                Program Files (x86)
d-----           3/9/18   6:42 AM                Temp
d-r---          12/1/17  11:30 AM                Users
d-----           3/6/18  11:46 AM                Windows


PS C:\Temp> 

我认为这极大地提高了可读性,但是如果出于某种原因要在PowerShellv2中运行此脚本,则确实牺牲了向后兼容性。

TL; DR

我认为您需要这样做:

$file = Get-ChildItem `
    -Recurse `
    -Force `
    -Path 'C:\' `
    -File `
    -ErrorAction SilentlyContinue | 
        ?{$_.Name -eq $fileName}

我执行的一个简单测试:

PS C:\Temp> $fileName='file'
PS C:\Temp> $file = Get-ChildItem `
>>     -Recurse `
>>     -Force `
>>     -Path 'C:\' `
>>     -File `
>>     -ErrorAction SilentlyContinue |
>>         ?{$_.Name -eq $fileName}
PS C:\Temp> $file.PSPath
Microsoft.PowerShell.Core\FileSystem::C:\Temp\file
PS C:\Temp>

我希望这个对你有用!

编辑

现在,我考虑了一下,您也可以使用-Filter来过滤文件名:

PS C:\Temp> New-Item demo.csv


    Directory: C:\Temp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----           3/9/18   7:12 AM              0 demo.csv


PS C:\Temp> Get-ChildItem -Path C:\Temp\ -Filter "$fileName"


    Directory: C:\Temp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----           3/9/18   6:42 AM              0 file


PS C:\Temp> $fileName = '*.csv'
PS C:\Temp> Get-ChildItem -Path C:\Temp\ -Filter "$fileName"


    Directory: C:\Temp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----           3/9/18   7:12 AM              0 demo.csv


PS C:\Temp>

这将消除您对Where-Object管道的需求。

而且...我只是注意到mklement0在上面的注释部分中也指出了第二点。 我的错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM