PowerShell 命令在 PowerShell 中有效,但在脚本中无法正常运行,为什么?

8

我想将我的IIS绑定导出为CSV或TXT文件,我只是试着使用以下命令:

Get-ChildItem -path IIS:\Sites

这个命令完美地工作,同时使用这个命令将输出保存为 .txt 文件也非常完美:
Get-ChildItem -path IIS:\Sites | out-file "D:\_utils\PowerShell Scripts\IISexport\IISExport.txt"

但是一旦我将其封装成一个函数,PowerShell 就会尝试查找物理路径 IIS:\Sites,这当然不存在。

Get-ChildItem : Cannot find drive. A drive with the name 'IIS' does not exist.
At D:\_utils\PowerShell Scripts\IISReport.ps1:8 char:1

目前我的脚本非常简单:

$today = Get-Date -format M.d.yyyy

function IISexport

{
Get-ChildItem -path IIS:\Sites
}

IISexport | out-file "D:\_utils\PowerShell Scripts\IISexport\IISExport$today.txt"

我错过了什么?我想将其输出到文件中,因为我想将其放入一个更大的脚本中,该脚本可以从xx个Web服务器中输出我的Web绑定。

我认为这与环境变量有关,这些变量已经在控制台中给出,但不在我的脚本中。但是我不知道如何管理它们。已经尝试过get-childitem evn:,它返回了很多变量。


1个回答

19
在你的脚本顶部添加这行代码,它将引入必要的IIS模块:
Import-Module WebAdministration;

编辑,感谢@KyleMit的提醒:如果您没有安装WebAdministration,您可能需要首先以提升权限运行以下命令

Import-Module ServerManager; Add-WindowsFeature Web-Scripting-Tools

好的,有趣。我真的需要为每个会话导入这些模块吗?我以为它们会留在机器上。谢谢!可以工作。 - RayofCommand
1
这取决于您如何执行脚本 - 如果脚本执行并退出,则需要它。另一方面,如果您在保持打开的PS窗口中启动脚本,则只需要该命令一次(因为模块将在会话期间保持导入状态)。 - Raf
好的,我以为每台机器只需要导入模块一次。这解释了一切。 - RayofCommand
我有类似的问题,但我是在使用AddType和WebAdministration的强名称。为什么那个方法会失败,而Import-Module却可以工作? - Mike Cheel
2
请注意,如果您没有安装 WebAdministration,您可能需要首先以提升的权限运行以下命令:Import-Module ServerManager; Add-WindowsFeature Web-Scripting-Tools - KyleMit
使用提升的权限解决了我的问题。谢谢! - Tormod Haugene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接