使用PowerShell远程运行certreq

使用PowerShell远程运行certreq,powershell,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 -V

我正在尝试部分自动化我们的证书请求过程,但在远程运行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\"

根据评论,我假设您在远程计算机上本地运行certreq命令时没有问题,并且您在将文件从本地路径移动到远程路径的第一个cp命令中也没有问题。让我相信问题完全在于
Invoke命令的格式

假设您在解析服务器名称时没有问题,并且给定的凭据至少能够在远程计算机上运行certreq,那么我唯一的建议就是删除scriptblock的双引号

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

根据评论,我假设您在远程计算机上本地运行certreq命令时没有问题,并且您在将文件从本地路径移动到远程路径的第一个cp命令中也没有问题。让我相信问题完全在于
Invoke命令的格式

假设您在解析服务器名称时没有问题,并且给定的凭据至少能够在远程计算机上运行certreq,那么我唯一的建议就是删除scriptblock的双引号

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

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

Invoke-Command -ComputerName [servername] -ScriptBlock { & certreq @("-q", "-new", "-p <password>", "C:\temp\inf.inf", "C:\temp\request.csr") } -Credential $cred
Invoke命令-ComputerName[servername]-脚本块{&certreq@(“-q”、“-new”、“-p”、“C:\temp\inf.inf”、“C:\temp\request.csr”)}-凭证$cred
我还假设您刚刚从脚本中删除了密码,否则我不理解您为什么有
-p
参数


来源:

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

Invoke-Command -ComputerName [servername] -ScriptBlock { & certreq @("-q", "-new", "-p <password>", "C:\temp\inf.inf", "C:\temp\request.csr") } -Credential $cred
Invoke命令-ComputerName[servername]-脚本块{&certreq@(“-q”、“-new”、“-p”、“C:\temp\inf.inf”、“C:\temp\request.csr”)}-凭证$cred
我还假设您刚刚从脚本中删除了密码,否则我不理解您为什么有
-p
参数


来源:

在远程计算机上本地运行时是否得到了预期的结果?除了remote命令外,一切似乎都正常。我得到的错误是当它试图将csr文件带回时。您得到的错误是什么?我得到的错误是无法将csr文件转回。有人能说明在给定相同值时本地生成的csr内容与远程计算机上生成的csr内容之间的差异吗?为什么它不能在本地生成..当在远程计算机上本地运行时,它会得到预期的结果吗?除了remote命令之外,一切似乎都正常。我得到的错误是当它试图将csr文件带回时。您得到的错误是什么?我得到的错误是无法将csr文件转回。有人能说明在给定相同值时本地生成的csr内容与远程计算机上生成的csr内容之间的差异吗?为什么它不能在本地生成。。