quinta-feira, novembro 23, 2017
Breaking News
Home » Programação/ Scripts » Power Shell » Mudando o nome do computador e grupo de trabalho com PowerShell

Mudando o nome do computador e grupo de trabalho com PowerShell

Power ShellNeste post vou mostrar-lhe um exemplo muito simples de como funções avançadas em PowerShell 2.0 pode ser utilizado para declarar seus próprios cmdlets. Se você quiser executar esses exemplos de scriptque você vai precisar para executar PowerShell como administrador ao executar conjunto de nome e junção de grupo de trabalho.

Ingressar em um grupo de trabalho:

$sysInfo = Get-WmiObject -Class Win32_ComputerSystem
$sysInfo.JoinDomainOrWorkgroup( “Purainfo” )

Alterar o nome do computador

Outro exemplo útil é mudar o nome do computador, para fazer isso digite o seguinte comando, mas lembre-se que você deve executar este comando durante uma sessão do PowerShell que tenha privilégios administrativos e você será obrigado a reiniciar o computador para que essas alterações entrem em vigor

$sysInfo = Get-WmiObject -Class Win32_ComputerSystem
$sysInfo.Rename(“PCPurainfo”)

GET-ComputerName

Esse cmdlet retorna apenas o valor mantido na variável de ambiente COMPUTERNAME ($Env:COMPUTERNAME), eu estou oferecendo esse cmdlet só para ter consistência em obter e definir o nome de um computador. Se você deseja executar este script em PowerShell 1.0 simplesmente remover o comentário de bloco, este foi incluído para ilustrar como você pode documentar que cmdlets.

function Get-ComputerName
{
<#

. SINOPSE

Obtém o nome do computador

. DESCRIÇÃO

Retorna uma string contendo o nome do computador

NOTAS.

Nome do arquivo: ComputerName.psm1

Aurthor: Diego Duarte

Requer: PowerShell 2.0

. Link

http://www.purainfo.com.br

. EXEMPLO

GET-ComputerName

#>
process
{
$Env:COMPUTERNAME
}
}

SET-ComputerName

function Set-ComputerName
{
    <#
    .SINOPSE
      Define o Nome do Computador
    .DESCRIÇÃO
        Usa o WMI para definir o nome do computador, se o nome é alterado com sucesso, 
        o usuário será solicitado a reiniciar e aplicar as alterações
    .NOTAS
        Nome do Arquivo: ComputerName.psm1
        Autor: Diego Duarte
        Requer: PowerShell 2.0
    .LINK
        http://www.purainfo.com.br
    .EXAMPLE
        Set-ComputerName -Name "{Novo Nome do Computador}"
    .EXAMPLE
        Set-ComputerName "{Novo Nome para o computador}"
    .EXAMPLE
        Set-ComputerName -Name "{Novo Nome para o Computador}" -AutoReboot
    .EXAMPLE
        Set-ComputerName "{Novo Nome para o Computador}" -AutoReboot
    .PARAMETER Name
        O novo nome que o computador será conhecido por
    #>
    param(
        [Parameter(Position=0, Mandatory=$true,ParameterSetName="Name")]
        [string]$Name,

        [Switch]$AutoReboot
    )

    process 
    {
        $sysInfo = Get-WmiObject -Class Win32_ComputerSystem
        $result = $sysInfo.Rename($Name)

        switch($result.ReturnValue)
        {        
            0 
            { 
                Write-Host -ForegroundColor Green "Success"

                if($AutoReboot -eq $false)
                {                    
                    $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", `
                        "Reboots the machine."

                    $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", `
                        "Não reiniciar a máquina, você vai ter que reiniciar manualmente a 
                        máquina para que as mudanças entrem em vigor."

                    $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)    

                    $ShouldReboot = $Host.UI.PromptForChoice("Reiniciar Maquina", `
                        "Você deve reiniciar para que a mudança tenha efeito. 
                        Você quer reiniciar agora?", $options, 0)
                }

                if($ShouldReboot -eq 0 -or $AutoReboot -eq $true)
                {
                    Restart-Computer
                }
            }
            5 { Write-Host -ForegroundColor Red "Esse cmdlet deve ser executado 
            com privilégios administrativos" }            
            default { Write-Host -ForegroundColor Red "Error" }
        }

    }
}

 


 

Da mesma forma cmdlets pode ser criada para mudar o grupo de trabalho e configurações de domínio. Aqui está o cmdlet que pode ser usado para obter o nome do grupo de trabalho. Novamente, isto pode ser adaptado para PowerShell 1.0, removendo os blocos de comentários.

function Get-Workgroup

{
<#
.SYNOPSIS
Obter o nome do grupo de trabalho que o computador atualmente pertence
.DESCRIPTION
Esse cmdlet retorna o nome do grupo de trabalho que o computador
Atualmente pertence.
.LINK
http://www.purainfo.com.br
.Example
Get-Workgroup
#>
process
{
(Get-WmiObject -Class Win32_ComputerSystem).Workgroup
}
}

Ingressar ao Grupo de trabalho

Aderir a um grupo de trabalho pode ser conseguido com o seguinte cmdlet. Este cmdlet usa algumas das novas e avançadas capacidades de ligação adicionados ao PowerShell 2.0 para parâmetros.

function Join-Workgroup
{
    <#
    .SYNOPSIS
        Joins the specified Windows work group
    .DESCRIPTION
        This cmdlet allows you to specify the name of a Windows Workgroup
        that you would like to join the computer to. You will need to reboot
        for these changes to take effect so the cmdlet will prompt you to do
        this, alternatively you can use the -AutoReboot switch as this will
        automatically reboot the machine so that the changes are applied.
    .LINK
        http://www.gangleri.net
    .Example
        Join-Workgroup "WorkgroupName"
    .Example
        Join-Workgroup "WorkgroupName" -AutoReboot
    .EXAMPLE
        Join-Workgroup -Workgroup "WorkgroupName"
    .EXAMPLE
        Join-Workgroup -Workgroup "WorkgroupName" -AutoReboot
    .PARAMETER Workgroup
        The name of the Windows Workgroup you wish to join
    .PARAMETER AutoReboot
        If supplied this instructs the cmdlet to automatically 
        reboot the computer so that the changes can take effect
    #>

    param(
        [Parameter(Position=0, Mandatory=$true,ParameterSetName="Workgroup")]
        [string]$Workgroup,

        [Switch]$AutoReboot
    )

    process
    {
        $sysInfo = Get-WmiObject -Class Win32_ComputerSystem
        $result =  $sysInfo.JoinDomainOrWorkgroup( $Workgroup )

        switch($result.ReturnValue)
        {            
            0 
            { 
                Write-Host -ForegroundColor Green "Success"

                if($AutoReboot -eq $false)
                {                    
                    $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", `
                        "Reboots the machine."

                    $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", `
                        "Does not reboot the machine, you will manually have to reboot this 
                         machine for changes to take effect."

                    $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)    

                    $ShouldReboot = $Host.UI.PromptForChoice("Reboot machine", `
                        "You must reboot for change to take effect. Do you want to reboot now?", $options, 0)
                }

                if($ShouldReboot -eq 0 -or $AutoReboot -eq $true)
                {
                    Restart-Computer
                }
            }

            5 { Write-Host -ForegroundColor Red "This cmdlet must be execute with administrative privileges" }

            default { Write-Host -ForegroundColor Red "Error" }
        }
    }
}

Alterando o Domínio

Trabalhar com domínios é semelhante a trabalhar com grupos de trabalho, você vai usar o JoinDomainOrWorkgroup único método você precisa especificar argumentos adicionais para o nome de usuário e senha. Os valores de um e dois são importantes. Uma significa ingressar no domínio e dois meios criar a conta.

$sysInfo = Get-WmiObject -Class Win32_ComputerSystem
$sysInfo.JoinDomainOrWorkgroup( "Purainfo", "password", "Purainfo\Admin", 1, 2 )

Se você gosta de um desafio pequeno você poderia tentar escrever o seu próprio cmdlet “Join Domain-‘dá-me uma mensagem se você precisar de alguma ajuda. Também como os códigos de retorno são processados ​​poderia ser envolvido em uma função que eu acabei de duplicada código aqui para tornar mais fácil para as pessoas a copiar / colar estes exemplos e brincar com eles. Eu estarei postando um exemplo tipo de transformar esses scripts em módulos do PowerShell 2.0, que você pode facilmente distribuir para os outros.

Embora o cmdlet Add-Computer em PowerShell 2.0 pode alcançar esta mesma funcionalidade eu ainda acho que esses são bons exemplos de desenvolvimento de seus próprios cmdlets PowerShell 2.0 usando funções avançadas que não são complicados e permitem que você se concentrar nas porcas e parafusos de funções avançadas.

Artigo Original: http://www.gangleri.net/2009/11/25/ChangingComputerNameAndWorkgroupWithPowerShell.aspx

Sobre Diego Duarte

Diego Duarte Atua como coordenador de NOC, toca um violãozinho nas horas vagas e tenta eternamente entender o que o fez escolher TI

Veja também!

Logo Powershell

Obter chaves de produtos de sistemas locais e remotos

Neste artigo veremos como coletar a chave de Windows Remotamente de vários computadores e servidores. Rápido e Fácil

Este artigo lhe foi útil? comente e ajude outros acrescentando seu ponto de vista!