Powershell command works in Powershell but not inside of a script, why?

RayofCommand picture RayofCommand · Jun 23, 2014 · Viewed 8.9k times · Source

I wanted to outfile my IIS Bidings to csv or txt , I am simply playing around a bit using that cmdlet :

Get-ChildItem -path IIS:\Sites

which works perfectly, also outfiling to .txt works perfect using this command :

Get-ChildItem -path IIS:\Sites | out-file "D:\_utils\PowerShell Scripts\IISexport\IISExport.txt"

But as soon as I wrap it into a function powershell tries to find the physical path IIS:\Sites which of course does not exist.

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

my script is really simple so far :

$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"

What am I missing ? I would like to outfile this because I would love to put it into a bigger script which outfiles my webbindings from xx webservers.

I think it's related to the env variables which are given already in the console but not inside my script. But I don't know how to manage them. Already tried get-childitem evn: which returned me a lot of variables.

Answer

Raf picture Raf · Jun 23, 2014

Add this line at the top of your script, it will import the necessary IIS module:

Import-Module WebAdministration;

EDIT, thanks to @KyleMit: if you don't have WebAdministration installed, you may need to first run (with elevated privilege)

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