如何通过在Get-FilesByDate
脚本本身内调用files.ps1
来打印files的列表?
$ pwsh files.ps1
Get-FilesByDate
txt
1
1
/home/thufir/
$ cat files.ps1
Function Get-FilesByDate
{
Param(
[string[]]$fileTypes,
[int]$month,
[int]$year,
[string[]]$path)
Get-ChildItem -Path $path -Include $filetypes -Recurse |
Where-Object {
$_.lastwritetime.month -eq $month -AND $_.lastwritetime.year -eq $year }
} #end function Get-FilesByDate
Write-Output Get-FilesByDate("txt",1,1,"/home/thufir/")
另外还是要用文件名填充数组?任何文件或所有文件,或txt
。
答案 0 :(得分:1)
Write-Output
几乎不需要,因为您可以依靠PowerShell的隐式输出行为:
# By neither redirecting nor piping nor capturing the output from
# this call, what it returns is *implicitly* output.
# Note the absence of parentheses and the separation of arguments with whitespace.
Get-FilesByDate "txt" 1 1 "/home/thufir/"
请注意,必须如何在参数列表中将参数传递且不带括号 ,并用空白 分隔,而不是尝试使用伪方法语法。
换句话说:像Shell命令一样调用PowerShell命令(cmdlet,函数,脚本,别名),而不是C#中的方法。
为了将命令的输出作为 argument 传递给另一个命令:
(...)
或@(...)
或$(...)
(或@(...)
)中因此,为了显式使用Write-Output
(如上所述,这不是必需的),您必须编写:
Write-Output (Get-FilesByDate "txt" 1 1 "/home/thufir/")
要使用Get-FilesByDate
的输出填充数组:
$files = @(Get-FilesByDate "txt" 1 1 "/home/thufir/")
@(...)
确保$files
接收一个数组,即使该函数碰巧只返回一个单个文件;或者,您可以 type-constrain 变量,从而确保它是一个数组:
[array] $files = Get-FilesByDate "txt" 1 1 "/home/thufir/"
但是请注意,在PowerShell(版本3起)中通常不需要明确使用数组,因为偶数标量(单个值)都隐式地像数组一样-参见this answer。
进一步阅读: