Neste 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
. EXEMPLO
GET-ComputerName
#>process{$Env:COMPUTERNAME}}
SET-ComputerName
function Set-ComputerName { <# .SINOPSE Define o Nome do Computador .DESCRIÇÃOUsa 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 .LINKPagina Inicial.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
.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 .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: