Rya*_*yan 2 powershell function powershell-3.0
我正在尝试制作一个脚本,其中包含比较两个文件夹项目的整齐布局的功能.该程序:
作为测试我一直在比较相同的文件夹本身(输出应该是假,假).在制作步骤1($referencepath)函数(FolderPrompt)时,我的程序无法正常工作,我的意思是我几乎每次运行时都会得到不同的答案.
这有效:
$referencePath = Read-Host -Prompt "Enter new DTNA folder path to check" 
NameDisc
SizeDisc
function NameDisc {
    write-host "Name Discrepancy: " -NoNewline 
    if (Compare-Object -Property name (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
        {return $true} 
    else
        {return $false}
}
function SizeDisc {
    write-host "Size Discrepancy: " -NoNewline 
    if (Compare-Object -Property length (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
        {return $true} 
    else
        {return $false}
}     
但这不是:
FolderPrompt
NameDisc
SizeDisc
function FolderPrompt {
    $referencePath = Read-Host -Prompt "Enter new DTNA folder path to check" 
}
function NameDisc {
    write-host "Name Discrepancy: " -NoNewline 
    if (Compare-Object -Property name (Get-ChildItem $referencePath) -DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
        {return $true} 
    else
        {return $false}
}
function SizeDisc {
    write-host "Size Discrepancy: " -NoNewline
    if (Compare-Object -Property length (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
        {return $true} 
    else
        {return $false}
}     
我试过了:
在调用函数之前声明函数
把$referencePath = 0每次重置价值以为是问题
放在Return $referencePath不同功能的最后
我最好的猜测是我需要做一些事情function <name> ($referencePath)来传递变量(?).
$referencepath在分配给函数后,它将变为函数的本地函数,因此它的值将丢失,因为您不返回它.你说你试过在"各种功能"中返回它,但目前还不清楚它是什么样的.
您也不应该依赖从父作用域继承变量的函数.理想情况下,您将传递任何所需的信息作为参数.
在PowerShell中调用函数时,不要使用括号和逗号作为参数,请使用空格.
function FolderPrompt {
    Read-Host -Prompt "Enter new DTNA folder path to check" 
}
function NameDisc { 
param($referencePath)
    write-host "Name Discrepancy: " -NoNewline 
    if (Compare-Object -Property name (Get-ChildItem $referencePath) -DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
        {return $true} 
    else
        {return $false}
}
function SizeDisc {
param($referencePath)
    write-host "Size Discrepancy: " -NoNewline
    if (Compare-Object -Property length (Get-ChildItem $referencePath) - DifferenceObject (Get-ChildItem P:\DTNA_201805081923))
        {return $true} 
    else
        {return $false}
}     
$refPath = FolderPrompt
NameDisc -referencePath $refPath
SizeDisc -referencePath $refPath
这就是修改后的代码的外观.
| 归档时间: | 
 | 
| 查看次数: | 160 次 | 
| 最近记录: |