仅在脚本中传递文件名

时间:2016-04-18 18:17:57

标签: powershell

我每天收到一组文件,我必须解密。我这样做是通过运行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

2 个答案:

答案 0 :(得分:3)

Get-ChildItem | Select-Object Name为每个收到的项目(来自Get-ChildItem的文件)创建一个具有Name - 属性的对象。您想要访问Name

的值

您可以使用(Get-ChildItem -Filter "*.pwd.enc*").Name,就像您自己回答的那样,但是如果PS 2.0发现了多个文件,则会失败。我通常建议使用-ExpandPropertyForeach-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