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…
。如果元素多于变量,最后一个左边的变量将捕获返回数组的所有剩余元素。感谢大家的帮助,这正是我要寻找的。像货运火车一样工作!:)