我需要在 PS 脚本中处理 SVN 工作副本,但是我无法将参数传递给函数。这是我所拥有的:
function foo($arg1, $arg2)
{
echo $arg1
echo $arg2.FullName
}
echo "0: $($args[0])"
echo "1: $($args[1])"
$items = get-childitem $args[1]
$items | foreach-object -process {foo $args[0] $_}
Run Code Online (Sandbox Code Playgroud)
我想通过$arg[0]为$arg1对foo,和$arg[1]作为$arg2。但是,它不起作用,由于某种原因$arg1总是空的:
PS C:\Users\sbi> .\test.ps1 blah .\Dropbox
0: blah
1: .\Dropbox
C:\Users\sbi\Dropbox\Photos
C:\Users\sbi\Dropbox\Public
C:\Users\sbi\Dropbox\sbi
PS C:\Users\sbi>
Run Code Online (Sandbox Code Playgroud)
注:该"blah"参数不为过$arg1。
我绝对确定这是一件非常简单的事情(我才刚开始做 PS,仍然觉得很笨拙),但我已经用了一个多小时的时间来解决这个问题,我找不到任何东西。
Ste*_*ski 10
$args[0] 没有在 foreach-object 中返回任何内容的原因是 $args 是一个自动变量,它将未命名的、不匹配的参数传递给命令,而 foreach-object 是一个新命令。进程块没有任何不匹配的参数,因此 $args[0] 为空。
可以提供帮助的一件事是您的脚本可以有参数,就像函数一样。
param ($SomeText, $SomePath)
function foo($arg1, $arg2)
{
echo $arg1
echo $arg2.FullName
}
echo "0: $SomeText"
echo "1: $SomePath"
$items = get-childitem $SomePath
$items | foreach-object -process {foo $SomeText $_}
Run Code Online (Sandbox Code Playgroud)
当您开始希望从您的参数中获得更多功能时,您可能需要查看我写的一篇关于参数从 $args 到我们现在可以使用的当前高级参数的进展的博客文章。
该$arg[]数组似乎失去了ForEach-Object内的范围。
function foo($arg1, $arg2)
{
echo $arg1
echo $arg2.FullName
}
echo "0: $($args[0])"
echo "1: $($args[1])"
$zero = $args[0]
$one = $args[1]
$items = get-childitem $args[1]
$items | foreach-object {
echo "inner 0: $($zero)"
echo "inner 1: $($one)"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36020 次 |
| 最近记录: |