Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何创建函数并在同一脚本中调用它_Powershell_Powershell 2.0 - Fatal编程技术网

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
        } 
    }
}

理查德,谢谢你!我是新手,我做这件事的方式是我知道如何做的唯一方式。你给了我一个更好的选择,这确实有效!我肯定需要阅读这些命令,这样我才能更熟悉它们。再次感谢!理查德,谢谢你!我是新手,我做这件事的方式是我知道如何做的唯一方式。你给了我一个更好的选择,这确实有效!我肯定需要阅读这些命令,这样我才能更熟悉它们。再次感谢!