- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我以为我已经找到了这个问题的答案,但我玩得越多,我就越认为它是 Powershell 的设计缺陷。
我想拖放(或使用发送到机制)将多个文件和/或文件夹作为数组传递到 Powershell 脚本。
测试脚本
#Test.ps1
param ( [string[]] $Paths, [string] $ExampleParameter )
"Paths"
$Paths
"args"
$args
尝试#1
我使用以下命令行创建了一个快捷方式,并将一些文件拖到上面。这些文件作为单独的参数出现,首先在位置上与脚本参数匹配,其余部分放置在 $args 数组中。
尝试 #1 的快捷方式
powershell.exe -noprofile -noexit -file c:\Test.ps1
包装脚本
我发现我可以使用包装脚本来做到这一点...
#TestWrapper.ps1
& .\Test.ps1 -Paths $args
包装脚本的快捷方式
powershell.exe -noprofile -noexit -file c:\TestWrapper.ps1
批处理文件包装脚本
它通过批处理文件包装脚本工作......
REM TestWrapper.bat
SET args='%1'
:More
SHIFT
IF '%1' == '' GOTO Done
SET args=%args%,'%1'
GOTO More
:Done
Powershell.exe -noprofile -noexit -command "& {c:\test.ps1 %args%}"
尝试的答案
Keith Hill 取得了出色的成绩 suggestion使用以下快捷方式命令行,但它没有正确传递参数。带有空格的路径在到达 Test.ps1 脚本时被分开。
powershell.exe -noprofile -noexit -command "& {c:\test1.ps1 $args}"
有人找到了无需额外脚本即可完成此操作的方法吗?
最佳答案
我意识到这个问题已经有几年了,但由于它仍然是许多与通过资源管理器拖放运行 PowerShell 相关的 Google 查询的首要结果,我想我应该发布我想到的内容今天的内容希望对其他人有帮助。
我希望能够将文件拖放到 PowerShell (ps1) 脚本上,但找不到任何好的解决方案(没有任何不涉及额外脚本或快捷方式的解决方案)。我开始研究注册表中的文件关联,并想出了一些似乎运行良好的东西。
首先,我们需要为 .PS1 文件添加 DropHandler 条目,以便 Explorer 知道 PS1 文件应该接受拖放操作。通过此注册表更改来做到这一点。您可能必须创建 ShellEx 和 DropHandler 子项。
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\ShellEx\DropHandler\
(Default) = {60254CA5-953B-11CF-8C96-00AA00B8708C}
此放置处理程序是 Windows 脚本宿主使用的处理程序。这是我的第一选择,因为它支持长文件名。如果您遇到空格或其他问题,可以尝试标准 Shell32 可执行文件(.exe、.bat 等)删除处理程序:{86C86720-42A0-1069-A2E8-08002B30309D}
。
这两个放置处理程序的工作原理都是简单地调用文件类型的默认动词(双击文件时会发生什么)(视为 Shell 键的 (Default)
值) 。对于 PS1 文件,这是打开。默认情况下,此动词在记事本中显示 PowerShell 脚本——不是很有帮助。
通过修改 PS1 文件的“打开”动词来更改此行为:
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command\
(Default) = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit -File "%1" %*
这将在打开时在 PowerShell 中运行脚本,并向其传递所有参数(删除的文件)。我将其设置为在脚本完成后保持打开状态,但您可以通过删除 -NoExit
选项来更改此设置。
就是这样。我还没有进行任何广泛的测试,但到目前为止它似乎运行得很好。我可以删除单个文件/文件夹以及组。参数列表中文件的顺序并不总是您所期望的(资源管理器对选定文件进行排序的一个怪癖),但除此之外,它似乎很理想。您还可以在 Shell:Sendto
中创建 PS1 文件的快捷方式,以便您使用“发送到”菜单传递文件。
以下是 REG 文件格式的两项更改:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\ShellEx\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command]
@="\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoExit -File \"%1\" %*"
注释:
由于这些更改,在资源管理器中双击 PS1 文件将执行脚本;要编辑而不是打开,您必须使用右键单击菜单。正如一个建议(从痛苦的经历中遗憾地学到的:),如果您有采取破坏性操作的脚本,您可能会考虑使用确认/健全性检查守卫。
通过拖放操作运行的脚本将具有默认的起始工作目录C:\Windows\system32\
。另一个需要小心的原因。
请记住,您需要更改 Execution Policy (Set-ExecutionPolicy) 除非您使用签名脚本。
如果您在 Windows 10 上调整了对 .PS1 文件的处理,则需要删除注册表项 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ps1\UserChoice
这将覆盖默认处理。
关于powershell - 拖放到 Powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819908/
我正在寻找实现 PowerShell 提供程序 在 电源外壳。 我一直在想,如果我只是定义类型,然后将它们导入我的 session (导入模块),我应该能够让它们可用。 例如,这个 不工作但它沿着我想
我创建的脚本使用了组件,这些组件仅在32位版本的Powershell中可用。 默认情况下,Windows使用Powershell x64执行脚本,这会导致一些错误。 是一种在脚本开头设置值以强制Win
是否可以从 Powershell 中检测它是否是嵌套 shell? 如果我打开 Powershell 或 cmd.exe 窗口,然后输入 powershell 在那里,是否有一个神奇的 $host.s
随着 PowerShell Core 的发布,应用程序在使用托管自动化库 (system.management.automation) 时如何选择调用哪个版本的 Powershell(Powershe
最近,我加入了我企业的 Windows 团队,凭借我的开发人员背景(一般是 Java、.NET 和 Web),我很快就对 PowerShell 产生了兴趣。我可以看到它比普通的旧批处理文件、VB 更有
假设我有一个 powershell 脚本,它在我当前路径的相对路径中包含一个 Powershell 哈希。让我们称之为“name.ps1”,它包含: $names = @{ "bob" = "b
我想为我正在构建的自定义 Powershell Commandlet 使用 SqlServerCmdletSnapin。如果我将以下代码添加到 PSM1 的开头: if ( (Get-PSSnapin
如何调用从 PowerShell 脚本中获取命名参数的 PowerShell 脚本? foo.ps1: param( [Parameter(Mandatory=$true)][String]$a=''
我即将为 Windows 管理员编写一个 PowerShell 脚本,以帮助他们完成与部署 Web 应用程序相关的某些任务。 有什么理由让我应该赞成或排除开发 PowerShell 模块 (.psm1
我的 powershell 模块有一个函数,我希望它返回一个非零退出代码。但是,作为一个模块函数,当我运行 Import-Module 时,它会加载到 powershell 控制台的上下文中。所以,当
我在这个问题上花了最后 4 个小时,非常感谢您提供的任何意见。 我需要使用不同的凭据调用 powershell 脚本并将参数传递给该脚本。 安装 WISEScript 中包装的程序后,此脚本开始收集机
我有一个场景,我需要将 powershell 命令的命令和输出转发到另一个进程以进行日志记录和处理。 我希望这个控制台尽可能接近 powershell,因此不希望将它简单地托管在另一个控制台程序中。
我正在尝试让一个主 PowerShell 脚本运行所有其他脚本,同时等待 30-60 秒以确保完成任务。我尝试过的所有其他操作都不会停止/等待第一个脚本及其进程完成,然后才能同时完成所有其他脚本,并且
我正在编写一个脚本来使用多个 plink (PuTTY) session 作为 Windows 版本的 clustersh。然而,我陷入困境,因为我想从 powershell 打开多个 Powersh
我读了这个答案:How to Open Powershell from Powershell start powershell 这将打开基础的大分辨率 PS 实例。如何打开 PS(x86)? 最佳答案
我很想知道我们是否可以在 Powershell 中做到这一点。 使用 Out-File 命令,我们可以通过管道将其输出写入文件。这样我就可以将我所有的历史命令发送到一个文本文件中。 问题是我可以在每次
我在 about_Pipelines 阅读了有关 PowerShell 中的管道工作原理的信息,并了解到管道一次传送一个对象。 所以,这个 Get-Service | Format-Table -Pr
我正在尝试像这样从 powershell 启动一个进程:- $proc = (start-process $myExe -argumentList '/myArg True' -windowStyle
## To run the script # .\get_status.ps1 -Hostname -Service_Action -Service_Name #$Hostname = "hos
让我们使用 powershell 命令 Write-Host "red text"-Fore red这会在红色前景中显示“红色文本”。 但是,您希望文本以稍微亮一点的方式显示字体颜色,浅红色。 有没有
我是一名优秀的程序员,十分优秀!