首页 > 解决方案 > 如何从上下文菜单对文件运行 PowerShell 脚本?

问题描述

我写了一个 PS 脚本,它替换文件开头的特定字符串,在文件末尾添加另一段字符串,最后输出一个 XML。

我的代码可能很难看(我不是程序员/工程师或其他任何人,只是想让一些经营小型企业的家庭成员的生活更轻松),但它确实有效:

$content = Get-Content -Path 'C:\Users\blabla\Desktop\4440341930.txt'
$newContent = $content -replace 'text to be replaced','this is going to replace stuff'
$newContent | Set-Content -Path 'C:\Users\blabla\Desktop\4440341930.txt'
Add-Content C:\Users\blabla\Desktop\4440341930.txt '</Items>'
$x = [xml](Get-Content "C:\Users\blabla\Desktop\4440341930.txt")
$x.Save("C:\Users\blabla\Desktop\4440341930.xml")

我希望他们能够通过右键单击 txt 文件从上下文菜单中运行此脚本。我做了一些研究,我得到了我必须添加到注册表的内容,但是,我不确定如何使它工作。由于他们要右键单击的每个文件的路径会有所不同,因此我在 $content 中指定的路径将不起作用。

我必须在我的代码中修改什么才能将其添加到注册表中?

标签: powershell

解决方案


为此,您需要:

  1. 在 SendTo 文件夹中创建快捷方式:“$DestinationPath\AppData\Roaming\Microsoft\Windows\SendTo”
  2. 目标:“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe”
  3. 论据: -File "d:\path\your PS1 file"
  4. 在您的程序中,将 Explorer 传递的文件名读取为:
Param
(
   [Parameter(Mandatory=$false)]
     [String] $FilePath
)

我编写了一个设置函数来完成步骤 1-3,我将其包含在上下文菜单中我想要的所有程序中,然后使用 -Setup 开关运行程序。我们不应该在这里发布开发的代码,但如果您无法弄清楚,请告诉我,我会发布它并希望我不会因此而被杀。哈哈!

更新:

如果你想传递多个文件,你需要稍微不同地处理这些文件。删除上面的 Param 块,然后使用这种类型的代码来检索文件。

If ($Args.count -eq 0) {
  
    $Message = "No Files were passed from File Explorer."
    [Void]$MsgBox::Show(
      "$Message","System Exit",$Buttons::OK, $MBIcons::Stop)
    Show-PowerShell
    Exit             #Comment out for testing from ISE!
  }
  Else {
    $FilesToCopy = $Args
  }

推荐阅读