函数后删除数组?
Array removed after function?
我正在制作一个脚本,它进入我们托管的所有服务器并获取特定组的所有成员和域名,然后将其导出到一个文件。我将用户和域名保存到两个数组 AA(用户数组)和 DA(域数组)AA 代表 användararray,"användare" 是瑞典语中的用户,所以这对我来说很有意义。
我注意到导出步骤不起作用,没有导出用户或域名,所以我尝试在函数中打印它们。但它不打印任何东西,所以我试图在不同的位置打印它(没有用)。经过一些实验后,我得出结论,数组实际包含任何信息的唯一位置是在 foreach 循环内,我在其中保存我找到的用户??!
这是代码
unction GetData([int]$p) {
Write-Host("B")
for ($row = 1; $row -le $UsernamesArray.Length; $row++)
{
if($CloudArray[$row] -eq 1)
{
.
$secstr = New-Object -TypeName System.Security.SecureString
$PasswordsArray[$row].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $UsernamesArray[$row], $secstr
$output = Invoke-Command -computername $AddressArray[$row] -credential $cred -ScriptBlock {
Import-Module Activedirectory
foreach ($Anvandare in (Get-ADGroupMember fjärrskrivbordsanvändare))
{
$AA = @($Anvandare.Name)
$DA = gc env:UserDomain
#$DA + ";" + $Anvandare.Name
$DA + ";" + $AA
}
}
$output
}
}
$DA
$AA
}
function Export {
Write-Host("C")
$filsökväg = "C:\Users2sien\Desktop\Coolkids.csv"
$ColForetag = "Företag"
$ColAnvandare = "Användare"
$Emptyline = "`n"
$delimiter = ";"
for ($p = 1; $p -le $DomainArray.Length; $p++) {
$ColForetag + $delimiter + $ColAnvandare | Out-File $filsökväg
$DA + $delimiter + $AA | Out-File $filsökväg -Append
}
}
ReadInfo
GetData
Export
谁能帮我解决这个问题?我已经坐下来解决这个问题一整天了,但我找不到解决方案。
您的变量 $DA 和 $AA 绑定到 GetData 函数,因此它们只存在于那里。您可以通过更改脚本的 scope 让它们在您的脚本中可用。
改变这个:
$AA = @($Anvandare.Name)
$DA = gc env:UserDomain
为此:
$script:AA = @($Anvandare.Name)
$script:DA = gc env:UserDomain
因此它们现在可用于脚本中的其他函数。
我也找到了改进脚本的方法,希望你能看到逻辑:
function GetData([int]$p) {
Write-Host("B")
for ($row = 1; $row -le $UsernamesArray.Length; $row++)
{
if($CloudArray[$row] -eq 1)
{
.
$secstr = New-Object -TypeName System.Security.SecureString
$PasswordsArray[$row].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $UsernamesArray[$row], $secstr
[array]$output = Invoke-Command -computername $AddressArray[$row] -credential $cred -ScriptBlock {
Import-Module Activedirectory
$array = @()
foreach ($Anvandare in (Get-ADGroupMember fjärrskrivbordsanvändare))
{
$object = New-Object PSObject
$object | Add-Member -MemberType NoteProperty -Name AA -Value @($Anvandare.Name)
$object | Add-Member -MemberType NoteProperty -Name DA -Value (gc env:UserDomain)
$object | Add-Member -MemberType NoteProperty -Name Something -Value $DA + ";" + $AA
$array += $object
}
Write-Output $array
}
Write-Output $output
}
}
}
您的函数现在将输出一些数据。
我正在制作一个脚本,它进入我们托管的所有服务器并获取特定组的所有成员和域名,然后将其导出到一个文件。我将用户和域名保存到两个数组 AA(用户数组)和 DA(域数组)AA 代表 användararray,"användare" 是瑞典语中的用户,所以这对我来说很有意义。
我注意到导出步骤不起作用,没有导出用户或域名,所以我尝试在函数中打印它们。但它不打印任何东西,所以我试图在不同的位置打印它(没有用)。经过一些实验后,我得出结论,数组实际包含任何信息的唯一位置是在 foreach 循环内,我在其中保存我找到的用户??!
这是代码
unction GetData([int]$p) {
Write-Host("B")
for ($row = 1; $row -le $UsernamesArray.Length; $row++)
{
if($CloudArray[$row] -eq 1)
{
.
$secstr = New-Object -TypeName System.Security.SecureString
$PasswordsArray[$row].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $UsernamesArray[$row], $secstr
$output = Invoke-Command -computername $AddressArray[$row] -credential $cred -ScriptBlock {
Import-Module Activedirectory
foreach ($Anvandare in (Get-ADGroupMember fjärrskrivbordsanvändare))
{
$AA = @($Anvandare.Name)
$DA = gc env:UserDomain
#$DA + ";" + $Anvandare.Name
$DA + ";" + $AA
}
}
$output
}
}
$DA
$AA
}
function Export {
Write-Host("C")
$filsökväg = "C:\Users2sien\Desktop\Coolkids.csv"
$ColForetag = "Företag"
$ColAnvandare = "Användare"
$Emptyline = "`n"
$delimiter = ";"
for ($p = 1; $p -le $DomainArray.Length; $p++) {
$ColForetag + $delimiter + $ColAnvandare | Out-File $filsökväg
$DA + $delimiter + $AA | Out-File $filsökväg -Append
}
}
ReadInfo
GetData
Export
谁能帮我解决这个问题?我已经坐下来解决这个问题一整天了,但我找不到解决方案。
您的变量 $DA 和 $AA 绑定到 GetData 函数,因此它们只存在于那里。您可以通过更改脚本的 scope 让它们在您的脚本中可用。
改变这个:
$AA = @($Anvandare.Name)
$DA = gc env:UserDomain
为此:
$script:AA = @($Anvandare.Name)
$script:DA = gc env:UserDomain
因此它们现在可用于脚本中的其他函数。
我也找到了改进脚本的方法,希望你能看到逻辑:
function GetData([int]$p) {
Write-Host("B")
for ($row = 1; $row -le $UsernamesArray.Length; $row++)
{
if($CloudArray[$row] -eq 1)
{
.
$secstr = New-Object -TypeName System.Security.SecureString
$PasswordsArray[$row].ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $UsernamesArray[$row], $secstr
[array]$output = Invoke-Command -computername $AddressArray[$row] -credential $cred -ScriptBlock {
Import-Module Activedirectory
$array = @()
foreach ($Anvandare in (Get-ADGroupMember fjärrskrivbordsanvändare))
{
$object = New-Object PSObject
$object | Add-Member -MemberType NoteProperty -Name AA -Value @($Anvandare.Name)
$object | Add-Member -MemberType NoteProperty -Name DA -Value (gc env:UserDomain)
$object | Add-Member -MemberType NoteProperty -Name Something -Value $DA + ";" + $AA
$array += $object
}
Write-Output $array
}
Write-Output $output
}
}
}
您的函数现在将输出一些数据。