Acessando caminhos de servidores remotos com variáveis de ambiente do Powershell

1

Como você faz o equivalente a usar o namespace $ env do servidor remoto sem codificar os caminhos de rede para cmdlets como o Set-Location? Eu tenho um script que faz um loop através de servidores remotos e estou tentando acessar seu equivalente de $ env: programfiles de um único script, mas esses servidores têm a variável definida em locais diferentes.

Basicamente, obtendo um loop que navega

c:\program files
\server1\c$\program files
\server2\c$\programs
\server3\d$\apps

Usando algo familiar e simples como

Set-Location "${env:programfiles}"

E faça com que o $ env do servidor remoto retorne um caminho de rede em vez de uma letra de unidade. A maneira atual que estou fazendo isso é pegar os caminhos usando Invoke-Command e construir o caminho manualmente (substituir: com $, append \\ server na frente do caminho, transformando "c: \ arquivos de programas" em "\\ server" \ c $ \ arquivos de programas ")

    
por overbyte 21.12.2011 / 06:26

2 respostas

1

Isso pode ser um pouco menos complicado e pode ser facilmente lançado em um loop foreach para trabalhar em sua lista de servidores.


$RemoteServer = "KRINGER"
#The credential is required if you are working in a Workgroup 
#environment or your domain account does not have permissions
$value = Invoke-Command -ComputerName $RemoteServer -ScriptBlock {$Env:ProgramFiles} -Credential (Get-Credential) | % {$_ -replace ":","$"}

$RemoteWorkingPath = "\" + $RemoteServer + "\" + $value + "\"
Write-Host "My remote path to use is: $RemoteWorkingPath"

Aqui está a captura de tela da saída:

    
por 22.12.2011 / 03:37
0

Tente isto:

function Get-RemoteProgramFilePaths {
    param ([string] $ComputerName)

    try {
        $hive = [Microsoft.Win32.RegistryHive]::LocalMachine
        $remoteRoot = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($hive, $ComputerName)
        $key = $remoteRoot.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion')
        $key.GetValueNames() | ? {$_.StartsWith('ProgramFilesDir')} | % {
            return New-Object -TypeName PSObject -Property @{
                Name = $_
                Value = $key.GetValue($_)
            }
        }
    } catch {
        throw 'Failed to get remote program file paths. The error was: "{0}".' -f $_
    }
}

Get-RemoteProgramFilePaths studio
    
por 21.12.2011 / 15:02

Tags