-
15. Re: Can a PowerCLI script display a prompt on a Guest OS?
LucD Jul 31, 2018 1:20 PM (in response to emcclure)Only when users have RDP-ed into the machine.
I'll post the script tomorrow -
16. Re: Can a PowerCLI script display a prompt on a Guest OS?
emcclure Aug 3, 2018 8:08 AM (in response to LucD)Hi LucD,
Any word on that script?
-
17. Re: Can a PowerCLI script display a prompt on a Guest OS?
LucD Aug 3, 2018 8:18 AM (in response to emcclure)I have it working, but I first had to update my Invoke-VMScriptPlus function to get round the +/- 2600 length limit that exists for the regular Invoke-VMScript PowerShell script.
And yes, the solution should work for RDP, not yet 100% about the local sessions.I think this is turning into a blog post
-
18. Re: Can a PowerCLI script display a prompt on a Guest OS?
emcclure Aug 3, 2018 8:21 AM (in response to LucD)Hi LucD,
Thanks. The users of the machines can only use RDP by design so that's perfect. Looking forward to seeing what you have.
-
19. Re: Can a PowerCLI script display a prompt on a Guest OS?
LucD Aug 3, 2018 8:24 AM (in response to emcclure)Only need to fix an issue with Invoke-WebRequest and invalid certificates.
Post should be ready early next week. -
20. Re: Can a PowerCLI script display a prompt on a Guest OS?
LucD Aug 5, 2018 11:49 AM (in response to emcclure)Published my solution, see Message To All Users, And Their Reply
-
21. Re: Can a PowerCLI script display a prompt on a Guest OS?
emcclure Aug 6, 2018 7:50 AM (in response to LucD)Hi LucD,
Thanks for the help on this. I feel like an idiot asking this, but how do I import the Invoke-VMScriptPlus as a module in PowerShell or PowerCLI? I thought I could save the code as a ps1 or pds1 but it definitely didn't like the pds1 when I tried to import it. I just want to make sure I have everything setup right before I give it a shot and so I know how to show other users on my team in case they ever need to run this.
-
22. Re: Can a PowerCLI script display a prompt on a Guest OS?
LucD Aug 6, 2018 8:37 AM (in response to emcclure)At the moment I didn't place it in a module.
There a couple of ways to make the function known to your system:- place everything in 1 .ps1 file (the Invoke-VMScriptPlus function and the script that sends the Messagebox. Then just run the .sp1
- place the Invoke-VMScriptPlus function in a .ps1 file. Place the MessageBox script in another .ps1 file. In that last .ps1 file you can dot-source the Invoke-VMScriptPlus .ps1 file. That way the function is "known" in your PowerShell session. Dot-sourcing is done like this ". .\Invoke-VMScriptPlus.ps1" (there is a space between the 2 dots at the beginning)
- Create a module. Place the function in a .psm1 file, then create a manifest (.psd1) with the New-ModuleManifest cmdlet.
-
23. Re: Can a PowerCLI script display a prompt on a Guest OS?
emcclure Aug 6, 2018 8:57 AM (in response to LucD)Hi LucD,
Ok when I try to get everything to run I wind up getting this issue:
Resolve-DnsName : The term 'Resolve-DnsName' 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.
At C:\Users\emcclure\Desktop\GenScripts\Invoke-VMScriptPlus.ps1:237 char:13
+ $hostName = Resolve-DnsName -Name $ip | Select-Object -ExpandProperty ...
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Resolve-DnsName:String) [], Com
mandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundExceptionInvoke-WebRequest : Cannot bind parameter 'Uri'. Cannot convert value
"https://:443/guestFile?id=197&token=52e6ffc7-9002-4ea5-e2bd-33599ea10971197"
to type "System.Uri". Error: "Invalid URI: The hostname could not be parsed."
At C:\Users\emcclure\Desktop\GenScripts\Invoke-VMScriptPlus.ps1:239 char:38
+ $copyResult = Invoke-WebRequest -Uri $filePath -Method Put -Body $Scr ...
+ ~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Invoke-WebRequest], Parame
terBindingException
+ FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerSh
ell.Commands.InvokeWebRequestCommandScripText copy failed!Status
At C:\Users\emcclure\Desktop\GenScripts\Invoke-VMScriptPlus.ps1:241 char:1
+ Throw "ScripText copy failed!`rStatus $($copyResult.StatusCode)`r$(($ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (ScripText copy failed!Status
:String) [], RuntimeException
+ FullyQualifiedErrorId : ScripText copy failed!StatusWhat did I do wrong?
-
24. Re: Can a PowerCLI script display a prompt on a Guest OS?
emcclure Aug 6, 2018 9:42 AM (in response to emcclure)Ok figured that out. I was running from Windows 7 and that module isn't on there. I went to a Windows 10 machine and didn't get that error, but now I get this:
Cannot find the type for custom attribute 'MyOBN'. Make sure that the assembly that contains this type is loaded.
At C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Invoke-VMScriptPlus\Invoke-VMScriptPlus.psm1:81 char:1
+ [MyOBN('VirtualMachine')]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: ([MyOBN('VirtualMachine')]:AttributeAst) [], RuntimeException
+ FullyQualifiedErrorId : CustomAttributeTypeNotFound
-
25. Re: Can a PowerCLI script display a prompt on a Guest OS?
LucD Aug 6, 2018 9:51 AM (in response to emcclure)Did you copy the class MyOBN that I provided in the same post as the Invoke-VMScriptPlus V2 post?
The easiest way is to copy everything in one .ps1 file. -
26. Re: Can a PowerCLI script display a prompt on a Guest OS?
emcclure Aug 6, 2018 10:18 AM (in response to LucD)Ok so I copied the Invoke-VMScriptPlus v2 and Message to all users into one ps1 file and called it AllForOne.ps1. I try running that, but I just get errors. Initially if I just leave things the way they are I get this:
Invoke-VMScriptPlus : Cannot process argument transformation on parameter 'VM'. Index was out of range. Must be
non-negative and less than the size of the collection.
Parameter name: index
At C:\Users\emcclure\Desktop\GenScripts\AllForOne.ps1:436 char:31
+ $result = Invoke-VMScriptPlus @sInvP
+ ~~~~~~
+ CategoryInfo : InvalidData: (:) [Invoke-VMScriptPlus], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Invoke-VMScriptPlusYou cannot call a method on a null-valued expression.
At C:\Users\emcclure\Desktop\GenScripts\AllForOne.ps1:436 char:1
+ $result = Invoke-VMScriptPlus @sInvP
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNullThen if I change the VM name you have in there to something I want to reboot I get this:
ConvertTo-SecureString : Cannot bind argument to parameter 'String' because it is null.
At C:\Users\emcclure\Desktop\GenScripts\AllForOne.ps1:424 char:41
+ $sPswd = ConvertTo-SecureString -String $pswd -AsPlainText -Force
+ ~~~~~
+ CategoryInfo : InvalidData: (:) [ConvertTo-SecureString], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ConvertToSe
cureStringCommandException calling "GetNetworkCredential" with "0" argument(s): "Object reference not set to an instance of an object."
At C:\Users\emcclure\Desktop\GenScripts\AllForOne.ps1:196 char:1
+ $GuestUser = $GuestCredential.GetNetworkCredential().username
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NullReferenceExceptionException calling "GetNetworkCredential" with "0" argument(s): "Object reference not set to an instance of an object."
At C:\Users\emcclure\Desktop\GenScripts\AllForOne.ps1:197 char:1
+ $plainGuestPassword = $GuestCredential.GetNetworkCredential().passwor ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NullReferenceExceptionException calling "CreateTemporaryFileInGuest" with "5" argument(s): "A general system error occurred: vix error codes
= (3033, 0).
" Exception calling "GetNetworkCredential" with "0" argument(s): "Object reference not set to an instance of an
object." Exception calling "GetNetworkCredential" with "0" argument(s): "Object reference not set to an instance of an
object." Cannot bind argument to parameter 'String' because it is null. You cannot call a method on a null-valued
expression. Cannot process argument transformation on parameter 'VM'. Index was out of range. Must be non-negative and
less than the size of the collection.
Parameter name: index 8/6/2018 10:08:56 AM Get-VM VM with name 'vEng' was not found using the specified filter(s).
8/2/2018 2:17:09 PM Set-NetworkAdapter The network "@{Cluster=z610; Name=VLAN3653; VLanId=3653}" doesn't exist on the
host. 8/2/2018 1:58:55 PM Get-VM VM with name 'rsupdtest2' was not found using the specified filter(s). Cannot
validate argument on parameter 'NetworkAdapter'. The argument is null. Provide a valid value for the argument, and
then try running the command again. 8/2/2018 1:58:54 PM Get-NetworkAdapter Please specify at least one of the
following: VirtualMachine, Template or Snapshot. 8/2/2018 1:58:54 PM Get-NetworkAdapter Could not find
VirtualMachine with name 'rsupdtest2'. 8/2/2018 1:58:47 PM Move-VM Value cannot be found for the mandatory parameter
VM 8/2/2018 1:58:47 PM Move-VM Could not find VirtualMachine with name 'rsupdtest2'. 8/2/2018 1:55:20 PM
Import-VApp The file item 'EN-W10ERS3x86_disk0.vmdk' does not match the hash from the manifest. 7/31/2018 2:08:02 PM
Set-NetworkAdapter The network "@{Cluster=z610; Name=VLAN3653; VLanId=3653}" doesn't exist on the host. 7/30/2018
12:05:09 PM Invoke-VMScript The guest operations agent could not be contacted. [0].Exception.Message
At C:\Users\emcclure\Desktop\GenScripts\AllForOne.ps1:220 char:1
+ Throw "$error[0].Exception.Message"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (Exception calli...ception.Message:String) [], RuntimeException
+ FullyQualifiedErrorId : Exception calling "CreateTemporaryFileInGuest" with "5" argument(s): "A general system e
rror occurred: vix error codes = (3033, 0).
" Exception calling "GetNetworkCredential" with "0" argument(s): "Object reference not set to an instance of an ob
ject." Exception calling "GetNetworkCredential" with "0" argument(s): "Object reference not set to an instance of
an object." Cannot bind argument to parameter 'String' because it is null. You cannot call a method on a null-valu
ed expression. Cannot process argument transformation on parameter 'VM'. Index was out of range. Must be non-negat
ive and less than the size of the collection.
Parameter name: index 8/6/2018 10:08:56 AM Get-VM VM with name 'vEng' was not found using the specified filter(s)
. 8/2/2018 2:17:09 PM Set-NetworkAdapter The network "@{Cluster=z610; Name=VLAN3653; VLanId=3653}" doesn't exist
on the host. 8/2/2018 1:58:55 PM Get-VM VM with name 'rsupdtest2' was not found using the specified filter(s).
Cannot validate argument on parameter 'NetworkAdapter'. The argument is null. Provide a valid value for the argum
ent, and then try running the command again. 8/2/2018 1:58:54 PM Get-NetworkAdapter Please specify at least one o
f the following: VirtualMachine, Template or Snapshot. 8/2/2018 1:58:54 PM Get-NetworkAdapter Could not find Vir
tualMachine with name 'rsupdtest2'. 8/2/2018 1:58:47 PM Move-VM Value cannot be found for the mandatory paramete
r VM 8/2/2018 1:58:47 PM Move-VM Could not find VirtualMachine with name 'rsupdtest2'. 8/2/2018 1:55:20 PM Impo
rt-VApp The file item 'EN-W10ERS3x86_disk0.vmdk' does not match the hash from the manifest. 7/31/2018 2:08:02 PM
Set-NetworkAdapter The network "@{Cluster=z610; Name=VLAN3653; VLanId=3653}" doesn't exist on the host. 7/30/20
18 12:05:09 PM Invoke-VMScript The guest operations agent could not be contacted. [0].Exception.MessageSo the machine names you see there, rsupdtest2 and EN-W10ERS3x86 are not machine names I specified in the script, so I don't know why it's pulling those. All I just really want to do is take your scripts and put them into this one:
$GuestCredential = Get-Credential
$vmlocation = Get-VM -Location Domain2 | sort Name #Gets folder where VM's are located, if folder name is not unique in vCenter it will reboot VM's in all folders with same name
foreach ($vm in $vmlocation) {#$script = '&C:\Users\emcclure\Desktop\GenScripts\RebootMessage.ps1'
Invoke-VMScriptPlus -vm $vm -ScriptText "C:\Users\emcclure\Desktop\GenScripts\RebootMessage.ps1" -ScriptType PowerShell -GuestCredential $GuestCredential | Format-List | Out-File reboot.txt -append
}
So that way all VM's in a folder I specify just get the prompt all at once. I'd make it a scheduled task to happen on a certain day, but I'm still new to PowerShell and thinking I'm just not doing something right to make this all work.
-
27. Re: Can a PowerCLI script display a prompt on a Guest OS?
LucD Aug 6, 2018 10:27 AM (in response to emcclure)Looks like you didn't update all the required fields.
I do for example see my test VM with the name 'vEng' in your errors.
I would need to see the .ps1 file you created.
Can you attach it?
Mask away the sensitive fields you might have in there -
28. Re: Can a PowerCLI script display a prompt on a Guest OS?
emcclure Aug 6, 2018 10:51 AM (in response to LucD)Hi LucD,
Here's the file. Nothing sensitive in it.
-
AllForOne.ps1.zip 4.8 K
-
-
29. Re: Can a PowerCLI script display a prompt on a Guest OS?
LucD Aug 6, 2018 12:26 PM (in response to emcclure)Try the attached .ps1 file.
You will have to update lines 424 & 425 with an account and password.
This account needs to be able to run scripts on the target station and access the DLL API
-
test.ps1.zip 5.0 K
-