我有一个 Windows powershell 脚本,可以在交互式编辑器中正常运行。该脚本是一个简单的单行 sql cmd:
sqlcmd -S servername -d dbname -E -W -w 999 -s "," -Q "SELECT select col1,col2,'','','','','','','','','','','','','','','','','','','','','','','','','' From Table" -o "C:\sqlcmd.csv"
当我在 powershell 命令提示符下输入它时,它工作正常。我将其保存在 ps1 文件中,并尝试通过键入 .\filename.ps1 从 cmd 提示符运行它,它会在记事本中打开它,但不会执行它。
然后我尝试以如下命令运行它:
powershell sqlcmd -S servername -d dbname -E -W -w 999 -s "," -Q "SELECT select col1,col2,'','','','','','','','','','','','','','','','','','','','','','','','','' From Table" -o "C:\sqlcmd.csv"
那句话说“-s 缺少参数...”。
有什么建议可以让它正确运行吗?我在某处读到了一些关于 Windows 执行策略的内容,想知道它是否是那样的。
操作系统是Windows XP,SP2。
答案1
您可以像这样从命令提示符运行 Powershell 脚本:
powershell -command "& .\filename.ps1"
您可能需要更改执行策略来运行 Powershell 脚本。
powershell -command "Set-ExecutionPolicy Unrestricted"
答案2
跑步regedit
HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell
将属性的值更改(Default)
为0
。
可能的值如下:
0
- 执行,Edit
- 在 PowerShell ISE 中打开,Open
- 在记事本中打开。
出于安全原因,Microsoft 将默认操作设置为Open
。
答案3
我意识到这个问题已经得到解答了,但是如果你真的想运行 .\filename.ps1,有一种方法可以做到。
第 1 部分:获取 PowerShell 位置
- 打开开始 > 所有程序 > 附件 > Windows Powershell。
- 右键单击 Windows Powershell 快捷方式。
- 左键单击“打开文件位置”。
- 突出显示顶部的位置栏。
- 右键单击位置栏。
- 左键单击“复制”。
第 2 部分:设置 .ps1 文件关联
- 转到.ps1 文件的位置。
- 右键单击.ps1 文件。
- 左键单击“属性”。
- 找到“打开方式:”的部分。左键单击右侧的“更改...”按钮。
- 左键单击右下角的“浏览...”按钮。
- 突出显示顶部的位置栏。
- 右键单击位置栏。
- 左键单击“粘贴”。
- 左键单击位置栏右侧带有指向右的箭头的按钮。
- 左键单击“powershell.exe”。
- 左键单击“打开”
- 返回“打开方式”窗口。
- 左键单击右下角的“确定”。
- 返回属性窗口。
- 左键单击右下角的“确定”。
第 3 部分:从命令提示符运行 .\filename.ps1
- 从命令提示符运行它。
.\文件名.ps1
—YP
答案4
即使采用了公认的解决方案,许多用户仍然面临此问题。
您可以像这样从命令提示符运行 Powershell 脚本:
powershell -command "& .\filename.ps1" 您可能需要更改执行策略来运行 Powershell 脚本。
powershell -命令“设置执行策略不受限制”
这应该可以解决问题,如果没有,问题就出在文件扩展名类型上,而不是执行策略上。
按照PowerShell 模块部署,*ps1 和 *psm1 的区别是:
虽然两者之间的唯一区别是扩展,但直接使用 psm1 文件进行开发要麻烦得多,因为它们不能直接执行。
我复制了代码并将其保存在带有 *ps1 扩展名的新文件中,并且执行得非常顺利。