Function 用于返回变量的PowerShell函数

Function 用于返回变量的PowerShell函数,function,variables,powershell,Function,Variables,Powershell,我正在编写一个函数来创建一个名为$Credentials的变量,我在另一个函数中使用它来验证它是否有效。通过在函数中使用return$Credentials,我希望变量在函数Import Password运行后可用,但事实并非如此 我认为这可以通过使用$script:Credentials来解决,但是如果函数可以输出这个变量,我认为不需要这样做 谢谢你的帮助 功能导入密码 # Check the password file Function Import-Password ($UserName,

我正在编写一个函数来创建一个名为
$Credentials
的变量,我在另一个函数中使用它来验证它是否有效。通过在函数中使用
return$Credentials
,我希望变量在
函数Import Password
运行后可用,但事实并非如此

我认为这可以通过使用
$script:Credentials
来解决,但是如果函数可以输出这个变量,我认为不需要这样做

谢谢你的帮助

功能导入密码

# Check the password file
Function Import-Password ($UserName,$PasswordFile,[switch]$SendMail) {
    try {
        if (!(Test-Path $PasswordFile)) {
            Write-Host "$env:COMPUTERNAME > Check password file: $PasswordFile > The password file can not be found`n
            - Password file :`t $PasswordFile
            - Server name   :`t $env:COMPUTERNAME" -ForegroundColor Yellow
            if ($SendMail) {
                Send-Mail "FAILED AD Authentication" "The password file can not be found" "- Password file : $PasswordFile<br>- Server name   : $env:COMPUTERNAME"
            }
            break
        }
        $Password = cat $PasswordFile | ConvertTo-SecureString -Force -ErrorAction Stop
        $Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $UserName,$Password 
        return $Credentials
    }
    catch {
        Write-Host "$env:COMPUTERNAME > Check password file: $PasswordFile > The password has been hashed with another account than the account used to run this script (all 3 users/owners need to be the same)`n
        - Script account:`t $env:USERDNSDOMAIN\$env:USERNAME
        - Password user :`t $UserName
        - Password file :`t $PasswordFile
        " -ForegroundColor Yellow
        if ($SendMail) {
            Send-Mail "FAILED AD Authentication" "The password has been hashed with another account than the account used to run this script (all 3 users/owners need to be the same)" "- Script account: $env:USERDNSDOMAIN\$env:USERNAME<br>- Password user : $UserName<br>- Password file : $PasswordFile"
        }
        break
    } 
}
Import-Password $UserName $PasswordFile
#检查密码文件
函数导入密码($UserName,$PasswordFile,[switch]$SendMail){
试一试{
if(!(测试路径$PasswordFile)){
写入主机“$env:COMPUTERNAME>检查密码文件:$PasswordFile>找不到密码文件`n
-密码文件:`t$PasswordFile
-服务器名称:`t$env:COMPUTERNAME“-ForegroundColor黄色
如果($SendMail){
发送邮件“AD身份验证失败”“找不到密码文件”“-密码文件:$PasswordFile
-服务器名称:$env:COMPUTERNAME” } 打破 } $Password=cat$PasswordFile |转换到SecureString-强制-错误操作停止 $Credentials=新对象System.Management.Automation.PSCredential-参数列表$UserName,$Password 返回$Credentials } 抓住{ 写入主机“$env:COMPUTERNAME>检查密码文件:$PasswordFile>密码已使用运行此脚本所用帐户以外的其他帐户进行哈希运算(所有3个用户/所有者必须相同)`n -脚本帐户:`t$env:USERDNSDOMAIN\$env:USERNAME -密码用户:`t$UserName -密码文件:`t$PasswordFile “-前底色黄色 如果($SendMail){ Send Mail“FAILED AD Authentication”“密码已使用运行此脚本所用帐户以外的其他帐户哈希(所有3个用户/所有者都需要相同)”-脚本帐户:$env:USERDNSDOMAIN\$env:USERNAME
-密码用户:$USERNAME
-密码文件:$PasswordFile } 打破 } } 导入密码$UserName$PasswordFile
您必须捕获函数的输出,以便稍后在脚本中使用它,例如:

$cred = Import-Password $UserName $PasswordFile

您必须捕获函数的输出,以便稍后在脚本中使用它,例如:

$cred = Import-Password $UserName $PasswordFile

您的代码是否可能在异常处理程序中结束?没有指定返回值。作用域不应在此处发挥作用。是的,当
转换为SecureString
失败时,代码有时会在
捕获
块中结束。如果不正确的用户正在运行脚本,则可能会发生这种情况。感谢更新。我想我误解了你的要求,但我看到@KeithHill提供了一个答案。你的代码有可能最终进入异常处理程序吗?没有指定返回值。作用域不应在此处发挥作用。是的,当
转换为SecureString
失败时,代码有时会在
捕获
块中结束。如果不正确的用户正在运行脚本,则可能会发生这种情况。感谢更新。我想我误解了你的要求,但我看到@KeithHill提供了答案。谢谢你的反馈。但是有没有一个选项可以让函数同时返回变量
$Password
?因为我以后在脚本中使用
$Credentials
执行
调用命令
,并在另一个函数中使用
$Password
进行验证。密码的SecureString版本将作为您返回的PSCredential的属性提供。@DarkLite1:Keith说的话。但是,为了完整性起见,您可以返回包含多个元素的数组(例如,
return$Credentials,
),并在单独的变量中捕获返回数组的元素:
$cred,$passwd=Import password…
。如果元素多于变量,最后一个左边的变量将捕获返回数组的所有剩余元素。感谢大家的帮助,这正是我要寻找的。像货运火车一样工作!:)谢谢你的反馈。但是有没有一个选项可以让函数同时返回变量
$Password
?因为我以后在脚本中使用
$Credentials
执行
调用命令
,并在另一个函数中使用
$Password
进行验证。密码的SecureString版本将作为您返回的PSCredential的属性提供。@DarkLite1:Keith说的话。但是,为了完整性起见,您可以返回包含多个元素的数组(例如,
return$Credentials,
),并在单独的变量中捕获返回数组的元素:
$cred,$passwd=Import password…
。如果元素多于变量,最后一个左边的变量将捕获返回数组的所有剩余元素。感谢大家的帮助,这正是我要寻找的。像货运火车一样工作!:)