Powershell 如何创建函数并在同一脚本中调用它
我需要在脚本中创建函数以及在同一脚本中调用函数的帮助。我已经测试了这段代码:Powershell 如何创建函数并在同一脚本中调用它,powershell,powershell-2.0,Powershell,Powershell 2.0,我需要在脚本中创建函数以及在同一脚本中调用函数的帮助。我已经测试了这段代码: function FUNC1() { $source="C:\Folder\file.txt" $destination="\\Server\folder" $searchFiles = Get-Content "$source" foreach($filename in $searchFiles){ Test-Path $destination\$filename } } function FU
function FUNC1() {
$source="C:\Folder\file.txt"
$destination="\\Server\folder"
$searchFiles = Get-Content "$source"
foreach($filename in $searchFiles){
Test-Path $destination\$filename
}
}
function FUNC2() {
$source="C:\Folder\file.txt"
$destination="\\Server\folder"
$searchFiles = Get-Content "$source"
foreach($filename in $searchFiles){
Move-Item C:\folder\$filename $destination -force
}
}
if (!(FUNC1)) {FUNC2}
但是,在测试FUNC1是否为false时,它不会移动任何内容。当我单独运行函数中的代码时,一切都正常工作。把它们作为函数放在一起,它就不起作用了。我不想创建单独的function.ps1来调用,我宁愿在代码中调用我的函数。谢谢
FUNC1
将返回一个数组(布尔值),如果$searchFiles
中有两个或多个文件名
即使它只包含多个$false
值(因为您测试的是数组,而不是它包含的值),这也始终是正确的。否定此值(!
)将始终给出$false
,因此将永远不会执行if
的内容
您的方法似乎非常奇怪,执行所有测试,然后移动测试显示的文件。我本以为会发生这样的事情:
Get-Content "$source" |
Where-Object { -not (Test-Path $destination\$_) } |
Foreach-Object { Move-Item C:\folder\$_ $destination }
它将遍历
$source
中的所有行,忽略目标中存在同名文件的情况,并将该文件移动到目标。如果$searchFiles
中有两个或多个文件名,FUNC1
将返回一个布尔数组
即使它只包含多个$false
值(因为您测试的是数组,而不是它包含的值),这也始终是正确的。否定此值(!
)将始终给出$false
,因此将永远不会执行if
的内容
您的方法似乎非常奇怪,执行所有测试,然后移动测试显示的文件。我本以为会发生这样的事情:
Get-Content "$source" |
Where-Object { -not (Test-Path $destination\$_) } |
Foreach-Object { Move-Item C:\folder\$_ $destination }
它将遍历$source
中的所有行,忽略目标中存在同名文件的情况,并将该文件移动到目标。您的语法令人困惑,“!(FUNC1)”将始终为$false。FUNC1的结果是一个变量(数组类型),而不是$null,将被视为true,所以!(FUNC1)将为$false。您可以将这两个功能合并为一个:
function FUNC1() {
$source="C:\Folder\file.txt"
$destination="\\Server\folder"
$searchFiles = Get-Content "$source"
foreach($filename in $searchFiles){
if(-not (Test-Path $destination\$filename))
{
Move-Item C:\folder\$filename $destination -force
}
}
}
您的语法令人困惑,“!(FUNC1)”将始终为$false。FUNC1的结果是一个变量(数组类型),而不是$null,将被视为true,所以!(FUNC1)将为$false。您可以将这两个功能合并为一个:
function FUNC1() {
$source="C:\Folder\file.txt"
$destination="\\Server\folder"
$searchFiles = Get-Content "$source"
foreach($filename in $searchFiles){
if(-not (Test-Path $destination\$filename))
{
Move-Item C:\folder\$filename $destination -force
}
}
}
理查德,谢谢你!我是新手,我做这件事的方式是我知道如何做的唯一方式。你给了我一个更好的选择,这确实有效!我肯定需要阅读这些命令,这样我才能更熟悉它们。再次感谢!理查德,谢谢你!我是新手,我做这件事的方式是我知道如何做的唯一方式。你给了我一个更好的选择,这确实有效!我肯定需要阅读这些命令,这样我才能更熟悉它们。再次感谢!