我每天收到一组文件,我必须解密。我这样做是通过运行PowerShell脚本,每次输入密码和文件名。我想自动执行此操作,但每次运行时,文件名都会输入额外的数据。如何写这个只传递文件名? 这两个文件以pwd.enc和tar.enc结尾,并以OpenSSL运行:
$pwd = Get-ChildItem D:\FILES\Claims\TEST -Filter "*.pwd.enc*" |
Select-Object Name
$tar = Get-ChildItem D:\FILES\Claims\TEST -Filter "*.tar.enc*" |
Select-Object Name
$file = Get-ChildItem D:\FILES\Claims\TEST -Filter "*.tar.enc*" |
Select-Object BaseName
dec_utility.exe rsa_key_123456.pri D:\FILES\Claims\TEST\$pwd D:\FILES\Claims\TEST\$tar D:\FILES\Claims\TEST\$file
答案 0 :(得分:3)
Get-ChildItem | Select-Object Name
为每个收到的项目(来自Get-ChildItem
的文件)创建一个具有Name
- 属性的对象。您想要访问Name
。
您可以使用(Get-ChildItem -Filter "*.pwd.enc*").Name
,就像您自己回答的那样,但是如果PS 2.0发现了多个文件,则会失败。我通常建议使用-ExpandProperty
或Foreach-Object
- 循环。实施例..
#Selects the value stored inside Name
$pwd = Get-ChildItem D:\FILES\Claims\TEST -Filter "*.pwd.enc*" | Select-Object -ExpandProperty Name
#Foreach item, access the Name-property
$pwd = Get-ChildItem D:\FILES\Claims\TEST -Filter "*.pwd.enc*" | Foreach-Object { $_.Name }
请注意,您的dec_utility.exe
- 命令将失败,上面的命令会找到多个文件。您可以使用Select-Object -First 1
或访问数组中的第一项(索引0)以仅获取第一个值。
$pwd = @(Get-ChildItem D:\FILES\Claims\TEST -Filter "*.pwd.enc*" | Select-Object -ExpandProperty Name)[0]
#or
$pwd = Get-ChildItem D:\FILES\Claims\TEST -Filter "*.pwd.enc*" | Select-Object -First 1 -ExpandProperty Name
答案 1 :(得分:0)
我感到愚蠢:
$pwd = (Get-ChildItem D:\FILES\Claims\TEST -Filter "*.pwd.enc*").Name
$tar = (Get-ChildItem D:\FILES\Claims\TEST -Filter "*.tar.enc*").Name
$file = (Get-ChildItem D:\FILES\Claims\TEST -Filter "*.tar.enc*").BaseName
dec_utility.exe rsa_key_123456.pri D:\FILES\Claims\TEST\$pwd D:\FILES\Claims\TEST\$tar D:\FILES\Claims\TEST\$file