【发布时间】:2023-03-18 18:51:01
【问题描述】:
我编写了 PowerShell 脚本来自动化一些 AD 命令。这是脚本。
$usergroup="TACACS Admins"
$computerrole="1626-APPCONF"
$zone="AWS"
$username="<>"
$password="<>";
[String[]] $HostServers ='smp001-01','sl1ps01-13-9';
$ValidatedHostServers = @()
$NotValidatedHostServers = @()
Import-Module ActiveDirectory
Import-Module Centrify.DirectControl.PowerShell
$Password = ConvertTo-SecureString $password -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential($username,$Password)
Set-CdmCredential -Domain <> -Credential $Cred
function Add-HostComputer{
Param($cred,$zone,$computerrole,$ValidatedHostServers)
# Get Computer Role
$GroupName = Get-ADGroup -Identity $computerrole
Write-Output $GroupName
foreach($Host in $ValidatedHostServers)
{
#Get -Member
$DistinguishedName = Get-ADComputer -Identity $Host
Write-Output $ValidatedHostServers
#Add $Hostserver to $comprole computer Role
$Output = Add-ADGroupMember -Identity $GroupName -Members $DistinguishedName -Credential $Cred
}
}
function ValidateHost{
Param($HostServers)
foreach($HostName in $HostServers)
{
try{
$HostOutput = Get-ADComputer -Identity $HostName -ErrorAction SilentlyContinue
$ValidatedHostServers += $HostName
}
catch
{
$NotValidatedHostServers += $HostName
}
}
Write-Host $ValidatedHostServers
$Result = @{"Valid_hosts"=$ValidatedHostServers;"Invalid_hosts"=$NotValidatedHostServers} | ConvertTo-Json -Compress
Write-Host $Result
Write-Host $ValidatedHostServers.Count
If($ValidatedHostServers.Count -ne 0)
{
Write-Host $ValidatedHostServers
Add-HostComputer -Cred $Cred -zone $zone -computerrole $computerrole -
ValidatedHostServers $ValidatedHostServers
}
}
$Final = ValidateHost -HostServers $HostServers
Write-Host $Final
我尝试写入托管输入,发现 $ValidatedHostServers 数组不是作为数组出现的。可能是我在语法上遗漏了一些东西。
数组中有两个值,但是
Write-Host $ValidatedHostServers.Count display as 1.
在此先感谢您的帮助。
这是 powerShell 中显示的错误
smp001-01sl1ps01-13-9
{"Invalid_hosts":[],"Valid_hosts":"smp001-01sl1ps01-13-9"}
1
smp001-01sl1ps01-13-9
Cannot overwrite variable Host because it is read-only or constant.
At line:27 char:9 + foreach($Host in $ValidatedHostServers) + CategoryInfo : WriteError: (Host:String) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId : VariableNotWritable
CN=1626-APPCONF,OU=Role Groups-
Computer,OU=Centrify,OU=Operations,DC=qateradatacloud,DC=com
【问题讨论】:
-
$host 是 PowerShell 中的自动变量。你不应该给它分配任何东西。至少替换它
-
迭代您的已验证主机列表要比尝试将它们全部作为参数导入要容易得多。对变量和函数使用相同的名称并不是一个好主意。您的 $ValidatedHostServers.Count 是 1,因为它只有一个对象 - 您连接服务器名称而不是添加为对象。