powershellshellpowershell-4.0windows-server-2012-r2

Certain commands like IISRESET and ROBOCOPY have stopped working in Powershell v4


Certain commands like IISRESET and ROBOCOPY have stopped working in Powershell v4

I have a pretty large script that runs those 2 commands at certain points, but these now both give me the general error:

iisreset : The term 'iisreset' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

These commands still work from CMD.

The only changes that were made is that I installed WMF5 and Powershell 5, but have yet to restart the server (a lot of copies to USBs running on them in the datacenter), so I'm still running Powershell 4. I even installed Powershell 7 and tried running the script but it mentioned that it was a PS4 module and that I needed WMF5 installed along with Powershell 5.1 (which is pending install. Well 5.0 is..)

This powershell script is something that is very crucial for me and I can't reboot for a couple of days.

Do you think the WMF5 install caused this or the Powershell 7 install? I removed Powershell 7 after I saw that the script was no longer working. Any workarounds until I can reboot, assuming that is the issue?

Windows Server 2012 R2 Powershell 4.0 with 5.0 pending reboot

I also just installed CMDer but I don't think it will have anything to do with it.


Solution

  • iisreset is not really a powershell command, its an EXE file located in C:\Windows\System32 So first check that the file is there, if its there check your environment variable $Env:Path in PowerShell. That should contain C:\WINDOWS\system32; and many other paths.

    Check $Env:Path by running this:

    ($env:path).split(";")
    

    If you have the iisreset.exe file in C:\WINDOWS\system32 and C:\WINDOWS\system32 is added to the $Env:Path in PowerShell you should be able to run it by doing typing: iisreset.exe

    To add the path to $Env:Path

    $ENV:PATH="$ENV:PATH;C:\WINDOWS\system32"
    

    But that wont be permanent unless you update the registry:

    $oldpath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).path
    $newpath = "$oldpath;C:\WINDOWS\system32"
    Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $newPath
    (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path
    

    Then to validate its correct run:

    ($env:path).split(";")