免责声明:我是PowerShell的新手并且自学成才。如果我使用不正确的命名法,我道歉。
PSVersion:5.1 主持人:Server2016
目标:为现场部署创建用户驱动的域控制器配置脚本。
大家好,
我试图从文本框输入工作流程以重命名服务器并重新启动然后继续脚本停止的位置。当我尝试重命名时,我收到以下错误:
无法验证参数' NewName'的参数。参数为null 或空。
代码:
$Handler_OK_Button_Click =
{
[string]$FieldUsrNm = $TextBoxUsrNm.Text
[string]$FieldPwd = $TextBoxPwd.Text
[string]$FieldSn = $TextBoxSn.Text
if (($FieldUsrNm -eq "") -or ($FieldPwd -eq "") -or ($FieldSn -eq "")) {
[System.Windows.Forms.MessageBox]::Show("Please Enter The Missing Information.", "Data")
}
else {
#Start Rename Workflow
Workflow RenameSvr {
Param (
[string]$FieldSn
)
#Rename Computer
InlineScript {Rename-Computer -NewName $Using:FieldSn -Force}
}
RenameSvr
#Closes Form
$FormMain.Close()
}
}
代码已从上面删除,以便于阅读。
我可以使用函数执行此任务,它可以工作。所以我知道字符串值正在传递。
如果有人能够指出我做错了什么,我们非常感激。
由于
答案 0 :(得分:0)
您使用ISE构建此表单吗?或者你使用像Powershell Studio这样的东西?在ISE中,您可以选择设置变量的行,并使用F9键插入断点。在Powershell Studio中,您以相同的方式插入断点,但您必须切换模式以在调试模式下运行脚本。此外,你不应该把" $使用:"在那里。我之前没见过,但我之前使用过很多参数。
这里要检查的事情当然是在$ FieldSn和$ TextBoxSn.Text中实际存入Rename-Computer cmdlet之前存储的值。检查以确保$ TextBoxSn变量中存储的内容确实是文本框对象。在" $ FieldSn = $ TextBoxSn.Text"处插入一个断点。和" InlineScript {Rename-Computer -NewName $ Using:FieldSn -Force}"并检查那时的值,让我们知道会发生什么。
答案 1 :(得分:0)
您未在-FieldSn
工作流程中传递RenameSvr
参数,因此该值为空。
在Else
语句中替换(在工作流之后):RenameSvr -FieldSn $FieldSn
,以便工作流接收值:
$Handler_OK_Button_Click =
{
[string]$FieldUsrNm = $TextBoxUsrNm.Text
[string]$FieldPwd = $TextBoxPwd.Text
[string]$FieldSn = $TextBoxSn.Text
if (($FieldUsrNm -eq "") -or ($FieldPwd -eq "") -or ($FieldSn -eq "")) {
[System.Windows.Forms.MessageBox]::Show("Please Enter The Missing Information.", "Data")
}
else {
#Start Rename Workflow
Workflow RenameSvr {
Param (
[string]$FieldSn
)
#Rename Computer
InlineScript {Rename-Computer -NewName $Using:FieldSn -Force}
}
RenameSvr -FieldSn $FieldSn
#Closes Form
$FormMain.Close()
}
}