El *_*ldo 0 powershell include get-childitem
我在函数中获取Get-ChildItem的过滤器参数时遇到问题.
以下工作正常,并显示整个文件列表:
c:\temp\Get-ChildItem -Include *deleteme*.txt -Recurse
Run Code Online (Sandbox Code Playgroud)
现在说我有以下脚本
#file starts here
#filename = GetLastFile.ps1
param([string] $filter)
$files = Get-ChildItem $filter
Write-Host $files #should print all matching files but prints nothing
$file = $files | Select-Object -Last 1;
$file.name #returns filename
#File ends here
Run Code Online (Sandbox Code Playgroud)
现在尝试运行脚本,
c:\temp.\GetLastFile.ps1 "-Include *deleteme*.txt -Recurse"
Run Code Online (Sandbox Code Playgroud)
没有回报.
提供过滤器*.*,工作正常.由于-Include或,它似乎失败了-Exclude.有任何想法吗?
您开始进入Powershell 2.0代理功能可以提供帮助的区域.但是,如果没有这个,这里有一个简单的方法在PowerShell 2.0中执行此操作,假设您只需要-Include和-Recurse.实际上,我建议使用-Filter而不是它会做你想要的,坦率地说它的速度要快一些(在我的一些测试中是4倍),因为-filter使用操作系统提供的文件系统过滤,而-include由PowerShell处理.
param([string]$Filter, [switch]$Recurse)
$files = Get-ChildItem @PSBoundParameters
Write-Host $files #should print all matching files but prints nothing
$file = $files | Select-Object -Last 1;
$file.name #returns filename
Run Code Online (Sandbox Code Playgroud)
该@符号用于将参数中的数组或散列表"splat"为命令.$ PSBoundParameters变量是PowerShell 2.0新增的自动变量,在函数中定义.它是一个包含所有有界(命名和位置)参数的哈希表,例如:
PS> function foo($Name,$LName,[switch]$Recurse) { $PSBoundParameters }
PS> foo -Name Keith Hill -Recurse
Key Value
--- -----
Name Keith
Recurse True
LName Hill
Run Code Online (Sandbox Code Playgroud)
当您针对命令splat这样的哈希表时,PowerShell会将键的(例如Recurse)值映射到命令上名为Recurse的参数.
| 归档时间: |
|
| 查看次数: |
5721 次 |
| 最近记录: |