通过powershell以管理员身份更改我们网络中的文件

时间:2017-10-10 11:35:54

标签: powershell

我尝试替换不在我们域中的设备上的.ini文件中的某些行。我需要使用本地管理员帐户执行copy / paste-item和get / set-content cmdlet。所有设备的IP都在一个单独的文本文件中。有人能告诉我,我如何以本地管理员身份执行我的cmdlet?

$user = ".\administrator"
$pass = ConvertTo-SecureString "password" -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user,$pass

$IP_Array = (Get-Content \\iparraypath)

foreach ($IP in $IP_Array) {
    mainreplace
}

function mainreplace {
    $path = "\\$IP\path.."
    Copy-Item $path path..

    $l = (Get-Content $path) 

    if ($l.StartsWith('oldtext')) {
        ($l) -replace "oldtext.*",'newtext' | Set-Content $path
    }
}

1 个答案:

答案 0 :(得分:1)

您要查找的cmdlet是Invoke-Command。此外,您希望在输入文件的整个内容上运行-replace,否则将从输出中删除所有不匹配的行。

foreach ($IP in $IP_Array) {
    Invoke-Command -Computer $IP -ScriptBlock {
        # use local path here, b/c the scriptblock is running on the remote host
        $file = 'C:\path\to\your.ini'
        (Get-Content $file) -replace 'oldtext.*', 'newtext' |
            Set-Content $file
    } -Credential $cred
}

不需要复制文件(除非您要保留备份副本),因为将Get-Content括在括号中(所谓的分组表达式)会在替换之前将整个内容读入内存。这样,您可以将修改后的输出直接写回源文件。