协助正确编写加入和取消加入域脚本的脚本

时间:2016-04-27 22:28:38

标签: powershell powershell-v2.0 powershell-v3.0 powershell-remoting powershell-v4.0

大家好我已经开始创建一个脚本,基本上可以自动通过脚本自动取消加入和加入计算机,这最初工作正常,直到我需要开始ping计算机重新联机。对于取消加入的情况,它可以正常工作,但在尝试加入时会出现所有问题。

也许新鲜的一双眼睛可以借给我一些英特尔谢谢你。

    <#
############################################################################################################
# Written by CPineda                             #  NOTE: This only works if computer is on the wire.      #
# This Script un-joins and re-joins the domain.  #        So its very important that we connect the devce  #
# Created: 04/27/2016                            #        to the LAN.                                      #
# Last revision 4/6/2016                         #                                                         #
############################################################################################################
#>

# Set up your Variables
$ComputerIP = "" #Stores the Computers IP
$ComputerName = "" #Stores the Name of the computer you will be working with.
#$LocalCredentials = "" #Stores the Local Administrator credentials. (As Neeeded)
$DomainCredentials = "" #Stores the Domain Administrator credentials.

# Get information needed for the script to run.
while ($ComputerIP -eq ""){

    Clear-Host #Clear the PS Console Window
    $ComputerIP = Read-Host "Enter the name of the Computer IP"
}

while ($ComputerName -eq ""){

    Clear-Host #Clear the PS Console Window
    $ComputerName = Read-Host "Enter the name of the Computer" 
}

<# while ($LocalCredentials -eq ""){

    Clear-Host #Clear the PS Console Window
    $LocalCredentials = Read-Host "Enter the User name of the Local User Admin Account"    
}
#> 

while ($DomainCredentials -eq ""){

    Clear-Host #Clear the PS Console Window
    $DomainCredentials = Read-Host "Enter the User name of the Domain User Admin Account"    
}
# Remove the computer from the Domain.
Remove-Computer -ComputerName $ComputerName -LocalCredential $ComputerName\administrator -UnJoinDomainCredential kelsonfla\$DomainCredentials -WorkgroupName WORKGROUP -Force -Restart

Read-Host "Hit ENTER to continue"

# Ping until computer returns on the wire.
Clear-Host
Write-Host "At this time we will ping the compputer in question untill it returns back online"
Write-Host "Hit ENTER to continue"
Read-Host

Test-Connection ($ComputerIP) {
        $result = Test-Connection $ComputerIP -Count 3 -Delay 10 -Quiet
        if ($Result | where { $_ -match 'Reply from ' }){$true} 
        else {$false}
}       
        Write-Verbose "The computer $ComputerIP has went down for a reboot. Waiting for it to come back up..."
        while (!(Test-Connection -ComputerName $ComputerIP)) {
            Start-Sleep -Seconds 5
            Write-Verbose "Waiting for $ComputerIP to come back online"
}
        Write-Verbose "The computer $ComputerIP has come online. Waiting for OS to initialize"
        $EapBefore = $ErrorActionPreference
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
        while (!(Get-WmiObject -ComputerName $ComputerIP -Class Win32_OperatingSystem -Credential $LocalCredentials)) {
            Start-Sleep -Seconds 5
            Write-Verbose "Waiting for OS to initialize..."
        $ErrorActionPreference = $EapBefore
}

# Add computer back to the Domain.
Add-Computer -ComputerName $ComputerIP -LocalCredential $ComputerName\administrator -DomainName kelsonfla.local -Credential kelsonfla\$DomainCredentials -Restart -Force

Read-Host "Hit ENTER to continue"

# Ping until computer returns on the wire.
Clear-Host
Write-Host "At this time we will ping the compputer in question untill it returns back online"
Write-Host "Hit ENTER to continue"
Read-Host

Test-Connection ($ComputerIP) {
        $result = Test-Connection $ComputerIP -Count 3 -Delay 10 -Quiet
        if ($Result | where { $_ -match 'Reply from ' }){$true} 
        else {$false}
}       
        Write-Verbose "The computer $ComputerIP has went down for a reboot. Waiting for it to come back up..."
        while (!(Test-Connection -ComputerName $ComputerIP)) {
            Start-Sleep -Seconds 5
            Write-Verbose "Waiting for $ComputerIP to come back online"
}
        Write-Verbose "The computer $ComputerIP has come online. Waiting for OS to initialize"
        $EapBefore = $ErrorActionPreference
        $ErrorActionPreference = [System.Management.Automation.ActionPreference]::SilentlyContinue
        while (!(Get-WmiObject -ComputerName $ComputerIP -Class Win32_OperatingSystem -Credential $LocalCredentials)) {
            Start-Sleep -Seconds 5
            Write-Verbose "Waiting for OS to initialize..."
        $ErrorActionPreference = $EapBefore
}

Clear-Host
Write-Output "If you are Reading this then you have successfully Unjoined and Re-Joined a Computer to the Network"
Start-Sleep -Seconds 3
Clear-Host

1 个答案:

答案 0 :(得分:0)

首先:对于ping部分,您应该删除代码:

Test-Connection ($ComputerIP) {
        $Result = ping $ComputerIP -n 3
        if ($Result | where { $_ -match 'Reply from ' }) {
            $true
        } else {
            $false
        }
} 

并简单地使用

!$result = $false
do {
  Write-Verbose "Waiting for $ComputerIP to come back online"
  $result = Test-Connection $ComputerIP -Count 2 -Delay 5 -Quiet
} while (!$result) 

然后使用$result布尔值来查看您的计算机是否再次响应。 Test-Connection是一个涵盖ping角色的Cmdlet。