繁体   English   中英

在Powershell中使用加密的密码作为CMD的参数

[英]use encrypted password as parameter for CMD in Powershell

我正在尝试使用加密的密码文件通过Powershell执行Oracle EXPDP(Oracle数据泵)命令,以便可以将数据库密码保留在git repo中。 这是我生成文件的代码如下所示:

"Password1" | ConvertTo-SecureString -AsPlainText -Force | ConvertFrom-SecureString | Out-File "C:\\Backups\\dbPassword.txt"

显然,Password1不是实际的密码,但是您知道了...

我想编写一个脚本来解密该文件,然后采用解密的“ Password1”值并将其在expdb命令中用作我的数据库密码。 到目前为止,这是我想出的:

$dbPassword =  cat C:\backups\dbPassword.txt | convertto-securestring -AsPlainText -Force
$timeStamp = "$(get-Date -f MMddyyyy)"
$expdb = 'EXPDP'
$dbCredential = 'system/'+$dbPassword
$expdbDirectory = 'directory=backups'
$expdbFull = 'full=Y'
$expdbDRFileNamePrefix = 'EXPALL_DR_' + $timeStamp
$expdbDRFileNameDMP = $expdbDRFileNamePrefix + '.DMP'
$expdbDRFileNameLOG = $expdbDRFileNamePrefix + '.log'
$expdbDRFile = 'file=' + $expdbDRFileNameDMP
$expdbDRLog = 'log=' + $expdbDRFileNameLOG

$command = $expdb + ' ' + $dbCredential + ' ' + $expdbDirectory + ' ' + $expdbFull + ' ' + $expdbDRFile + ' ' + $expdbDRLog

Invoke-Expression $command

执行此操作时,出现以下错误:

EXPDP : 
At line:1 char:1
+ EXPDP system/System.Security.SecureString directory=backups full=Y fi ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Export: Release 11.2.0.1.0 - Production on Fri Oct 14 16:09:55 2016
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
UDE-01017: operation generated ORACLE error 1017
ORA-01017: invalid username/password; logon denied
Username: 

我假设我需要使用等效于“ toString”命令的命令行使其完全纯文本。 任何人都知道这是什么,或者是否有办法使用PSCredential对象来执行此操作?

谢谢!

密码不会自行解密,因此您需要自己进行解密。 @briantist所建议的,最简单的方法是创建一个PSCredential对象。 它允许通过其GetNetworkCredential()方法检索(未加密的)密码。

$dbPassword = Get-Content 'C:\backups\dbPassword.txt' |
              ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object Management.Automation.PSCredential('system', $dbPassword)
...
$command = $expdb + ' ' + $cred.UserName + '/' +
           $cred.GetNetworkCredential().Password + ...

但是,您正在将未加密的密码存储在文件中,并且您的外部命令似乎仍然希望使用纯文本凭据,因此在从文件到命令的传输过程中,我看不到加密密码的意义。 这就像在空旷的地方建造一扇门。

没用的门是没用的

我想知道问题是否出在您的密码本身上。 您必须注意密码中包含哪些特殊字符。 例如, &或管道| 或重定向字符<>或引号' (尤其是双" ),甚至脱字号^可能会引起问题,因为它们是命令解释器的特殊字符。每个字符的转义方式将有所不同,因此取决于您所拥有的字符。

您可以先使用一个非常简单的密码尝试相同的操作,以查看其是否有效,如果可以,则可以从仅包含字母数字的密码开始,然后一次添加一个特殊字符以查看它们是否有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM