如何为Set-Content调用提供唯一凭据

时间:2017-12-28 17:20:54

标签: powershell authentication devops unc

我有一个powershell脚本,可以简单地更新几个不同的Web服务器上的文件。这些Web服务器中的每一个都具有不同的本地凭据,我需要提供这些凭据才能访问相关文件。如何更新我的脚本以实现此目的?

String first_win = driver.getWindowHandle();
driver.findElement(By.xpath("your_xpath")).click();
new WebDriverWait(driver,5).until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> s1 = driver.getWindowHandles();
Iterator<String> i1 = s1.iterator();
while(i1.hasNext())
{
    String next_win = i1.next();
    if (!first_win.equalsIgnoreCase(next_win))
    {
    driver.switchTo().window(next_win);

    System.out.println("Working on Sign In Window");
    }
}

同样,每个服务器都有自己需要使用的本地管理员凭据。

2 个答案:

答案 0 :(得分:2)

实现此目的的一种方法是,如果您真的被迫使用本地帐户(避免此问题是拥有域的目的之一),则使用net use在服务器上进行身份验证,复制文件,然后断开连接例如:

$userName = Read-Host "Enter user name for computer1"
net use \\computer1\ipc$ /user:$userName *
Set-Content \\computer1\c$\whatever\file.htm "Content here"
net use \\computer1\ipc$ /delete

当然,您可以在循环中概括计算机名称。在此示例中,您必须手动输入每台计算机的用户名和密码。

答案 1 :(得分:1)

由于-Credential的{​​{1}}参数似乎不起作用(如Bill_Stewart pointed out),您基本上有3个选项AFAICS:

  • 使用Set-Content按照his answer中建议的Bill验证会话,然后写入UNC路径。
  • 通过net use或PoSh方式映射网络驱动器:

    net use
  • 在远程服务器上运行$username = 'Administrator' $password = ConvertTo-SecureString 'password' -AsPlainText -Force $cred = New-Object Management.Automation.PSCredential ($username, $password) $drive = New-PSDrive -Name X -PSProvider FileSystem -Root "\\$server\c$\blah" -Persist -Credential $cred Set-Content -Path 'X:\foo.htm' -Value $statusMessage $drive | Remove-PSDrive 并将其写入本地路径。

    Set-Content

对于两种PowerShell方法,您必须准备一个PSCredential对象,如上所示,或者只是传递用户名(在这种情况下,系统会提示您输入密码)。