我编写了一个脚本,其功能类似于gpo编辑器,它可以获取一些GPO和OU并将其链接或取消链接,具体取决于用户的意愿。现在,此脚本在域控制器计算机上运行时确实可以运行,但是我需要它在域上的Windows 10计算机工作站上运行。因此,我需要在向用户显示GUI时进行调整,所有代码都必须调用DC上的命令。我不知道出了什么问题,但是当我手动输入命令一个接一个地运行时,当它作为脚本运行时,我得到了错误: 例如,这里是链接按钮的功能。 (我有一个带有2个列表框的gui。一个显示GPO,一个显示OU(ou显示为CanonicalName而不是Distinguishedname,因此$ SWITCH变量来回移动,以便用户以更友好的方式查看它) )
function LinkFn {
$ResultsTextBox.clear()
#This $SWITCH is used to Translate the user selection from the OU listbox from canonical back to distinguishedname
$SWITCH = Get-ADOrganizationalUnit -filter * -Property CanonicalName | Where-Object {$_.CanonicalName -eq $listBox2.SelectedItem}
ForEach ($line in $listBox1.selecteditems){
try {
Invoke-Command -ComputerName "$DCNAME" -ScriptBlock {New-GPlink -name $line -target $SWITCH -ErrorAction STOP | Out-null}
$ResultsTextBox.AppendText("`n GPO: $line HAVE BEEN LINKED Successfully.`n")
}
catch{
$ResultsTextBox.AppendText("`n$line ALREADY LINKED! TO THIS OU `n")
}}}
有人可以帮忙吗?
从我看来,我认为代码行存在问题:
$SWITCH = Invoke-Command -ComputerName "$DCNAME" -ScriptBlock {Get-ADOrganizationalUnit -filter * -Property CanonicalName | Where-Object {$_.CanonicalName -eq $listBox2.SelectedItem}}
$ switch空了(在DC上运行正常),为什么?
write your try catch block like below. You have to use
$using:variable
to use the variables declared outside of the scriptblock.;同样,如果用户无权连接到DC或远程连接到DC,则将无法工作。运行脚本的用户将需要对DC的管理员级别访问权限,或者对实际具有访问权限的帐户使用凭据。