使用PowerShell远程运行certreq

时间:2016-04-22 19:45:54

标签: powershell

我正在尝试部分自动化我们的证书申请流程,但我无法让certreq远程运行。代码如下。没有生成CSR,也没有生成错误,所以我不确定问题是什么。

$svr = Read-Host "Enter server name"
$cred = [cred]
$dom = (gwmi Win32_ComputerSystem -ComputerName $svr -Credential $cred).Domain
$infPath = "C:\temp\inf.inf"

Set-Content -Value "[Version]
Signature=`"`$Windows NT$`"
[NewRequest]
Subject=`"CN=$svr.$dom`"
Exportable=FALSE
KeyLength=2048
KeySpec=1
MachineKeySet=TRUE
PrivateKeyArchive=FALSE
ProviderName=`"Microsoft RSA SChannel Cryptographic Provider`"
ProviderType = 12
RequestType=PKCS10
Silent=TRUE
UseExistingKeySet=FALSE
UserProtected=FALSE
KeyUsage = 0xF0" -Path "C:\temp\inf.inf" -Force

cp -Path "C:\temp\inf.inf" -Destination "\\$svr\C$\temp\"

$reqString = "certreq -q -new -p C:\temp\inf.inf C:\temp\request.csr"

Invoke-Command -ComputerName [servername] -ScriptBlock {"certreq -q -new -p C:\temp\inf.inf C:\temp\request.csr"} -Credential $cred

cp -Path "\\$svr\C$\temp\request.csr" -Destination "C:\temp\"

2 个答案:

答案 0 :(得分:2)

基于注释,我假设您在远程计算机上本地运行certreq命令时没有问题,也没有第一个cp命令的问题,该命令将文件从本地路径移动到远程路径。让我相信问题完全取决于Invoke-Command的格式。

假设您没有问题解决服务器名称并且给出的凭证至少能够在远程计算机上运行certreq,我可以做的唯一建议是删除脚本块的双引号

Invoke-Command -ComputerName [servername] -ScriptBlock {certreq -q -new -p C:\temp\inf.inf C:\temp\request.csr} -Credential $cred

答案 1 :(得分:0)

在目标系统上执行Cmd命令有时会有点挑剔,因为它们并不总是拥有最新的PS版本。我发现的一种更可靠的方法是将参数作为变量/数组传递给Cmd命令:

Invoke-Command -ComputerName [servername] -ScriptBlock { & certreq @("-q", "-new", "-p <password>", "C:\temp\inf.inf", "C:\temp\request.csr") } -Credential $cred

我还假设您刚刚从脚本中删除了密码,否则我不明白为什么您有-p参数。

来源:http://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx