0

Привет, ребята, я начал создавать сценарий, который в основном автоматизировал бы отказ от присоединения и присоединения к компьютеру с помощью скрипта, который первоначально работал нормально вплоть до момента i необходимо запустить pinging для того, чтобы компьютер вернулся в Интернет. Для экземпляра un-join он работает нормально, но вся проблема возникает при попытке присоединиться.Помощь в правильном написании скрипта Присоединиться и не подключиться к домену

Возможно, свежая пара глаз может одолжить мне Intel по этому поводу, спасибо.

<# 
############################################################################################################ 
# 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 
+0

Я рекомендую предоставить короткий скрипт, содержащий только минимальный объем кода, необходимый для воспроизведения конкретной проблемы, с которой вы столкнулись. –

+0

Каков фактический ответ, который вы получаете? или это ситуация, когда цикл while продолжается вечно? Есть ли объект групповой политики, который отключает брандмауэр Windows, который исчезает, и теперь вы сталкиваетесь с проблемой межсетевого экрана, пытаясь увидеть неудачную машину? – ssaviers

+0

Проблема @Bill_Stewart заключается в том, что она не будет отображать запросы ping или подробные команды вообще. Когда он выполняется в первый раз, он проходит весь процесс аутентификации, и он выполняется, а затем, когда я нажимаю enter для процесса pinging ничего. – CharlesP

ответ

0

Первый: для пинг части, вы должны удалить код:

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 - это Командное командное событие, которое охватывает роль пинга.

+0

Я не совсем уверен, что вы хотите удалить? Удаление этой части кода и добавление этого приведет к недопустимому выражению. – CharlesP

+0

Итак, JPBlanc я пересмотрел весь скрипт немного, это ближе к тому, что вы, где думаете, я все еще должен его протестировать. – CharlesP

+0

Итак, JPBlanc, так как его настройка теперь первая половина скрипта работает нормально. Затем во время процесса ping я получаю запрос на аутентификацию без учетных данных, когда я нажимаю cancel. Я получаю правильное окно проверки подлинности, но не правильно закончу последовательность. Скрипт делает первый перерыв, а затем больше не работает правильно. – CharlesP

 Смежные вопросы

  • Нет связанных вопросов^_^