Powershell Continuations (>>) Broken In ISE But Not Normal Prompt - powershell

I've been working on this for 2 hours and I'm pulling my hair out. I was working in ISE on my profile script. I don't know if it's relevant but I was trying to store some commands in a variable and execute them later. Anyway I started getting a weird error when trying to create a here-string:
PS > $foo = #"
Ordinarily I would expect
>>
to follow, but instead I get this message:
PS C:\Users\lamartin> #"
The string is missing the terminator: "#.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
To make a long story short I have discovered that ALL my multi-line commands are broken, but only in ISE:
PS > gci |
An empty pipe element is not allowed.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : EmptyPipeElement
PS > gci |% {
Missing closing '}' in statement block.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingEndCurlyBrace
I removed all profiles and all modules. I verified there was nothing extra being loaded (that I could find). Here is something interesting I did find out. It turns out that Powershell actually ALWAYS errors whenever you do a continuation. It just hides it:
http://connect.microsoft.com/PowerShell/feedback/details/371321/benign-errors-for-missing-closing-are-left-in-the-error-variable
And sure enough if I type in one of the above commands in a regular window, while it works silently, if I later go back and look at the $error object there is an identical error. So basically ISE has decided to stop supressing these errors. I looked at all the settings I could think of $WarningPreference $ErrorActionPreference, etc but they are the same in ISE and normal console.
Thanks in advance for any help.
Update
Wow I feel stupid. Apparently this is expected behavior. I could have SWORN that it was behaving differently just a little bit earlier. I guess I was tired.

In PowerShell ISE, you can run a multiline command in the Command Pane. Press SHIFT+ENTER to enter each line of a multiline command, and press ENTER after the last line to execute the multiline command. You can find this in How to Use the Console Pane in the Windows PowerShell ISE.

Related

Initialize google chrome by calling a variable

This is what I had in mind:
$chrome= (Start-Process "chrome.exe" "chrome:\\newtab")
$chrome
Pushing enter at the end of the first line loads chrome instantly.
But instead of typing in "Start-Process......." each time, there must be a way to get this simple code assigned to something that is faster to type.
When running the second line of the code it just does nothing.
Any ideas?
By the way, I read this and this questions on this site but I still don't understand how to code this properly. I'm a total newcomer to this.
This is an edit in response to the answer given by #vonPryz
PS C:\>function Launch-Chrome {Start-Process "chrome.exe" "chrome:\\newtab"}
Get-Process : A positional parameter cannot be found that accepts argument 'Launch-Chrome'.
At line:1 char:1
+ PS C:\>function Launch-Chrome {Start-Process "chrome.exe" "chrome:\\n ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-Process], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetProcessCommand
PS C:\>Launch-Chrome
PS : Cannot find a process with the name "C:\>Launch-Chrome". Verify the process name and call the cmdlet again.
At line:1 char:1
+ PS C:\>Launch-Chrome
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\>Launch-Chrome:String) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
Tried it in powershell 2 and 1 but still doesn't work sadly.
There are quite a few ways to achieve this.
The first one is to create a function that launches Chrome. Like so,
PS C:\>function Launch-Chrome {Start-Process "chrome.exe" "chrome:\\newtab"}
PS C:\>Launch-Chrome
# A new Chrome window appears!
Save the function in your Powershell profile so that it'll be included on each new session. This might be the simplest solution, so try it first.
Another one is to create a script file that contains the function. Load the script either by dot-sourcing it on a session, or in your Powershell profile. If you need complex scripts, it might be worthwhile to maintain the scripts on separate path and just use profile to load those.
Third one is to create a Powershell module that contains the function. This is the most complex alternative out of the three solutions.
I fixed it.
PS C:\function L-C {Start-Process "chrome.exe" "chrome:\\newtab"}
PS C:\ L-C
# Chrome window opens

Need Help Setting Chrome as Default

This may look a little strange, but I am trying to open powershell within a batch file to set Chrome as the default browser. I know this seems counter intuitive, but I promise for this application and the rest of the content in the batch file, this is the route I have to go.
This is the bit of string I am using
start powershell.exe -noexit -command "$chromePath = "${Env:ProgramFiles(x86)}\Google\Chrome\Application\"
$chromeApp = "chrome.exe"
$chromeCommandArgs = "--make-default-browser" & "$chromePath$chromeApp" $chromeCommandArgs
but once it launches powershell, I get a missing terminator error.
Specifically this
The string is missing the terminator: ".
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
Can anyone help a novice identify what I'm missing?

Unable to run 7-Zip in Powershell

This came up in a discussion on another question I asked on running executables in Windows Powershell
Whenever I run 7z in my workplace machine that has PS 2.0, I get this error
Bad numeric constant: 7.
At line;1 char:2
+ 7 <<<< z
+ CategoryInfo : ParserError: <7:String> [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : BadNumericConstant.
Note that this error occurs even if I give the full filename 7z.exe. However, if I go into Command Line mode by entering cmd it works without any problems.
Any help would be appreciated.
Try this:
& "Path\to\7z.exe" arg1 arg2 etc
It sounds like PowerShell is trying to interpret your [String] literally as an [Int]

PowerShell script error: the string is missing the terminator:

Incredibly simple powershell script...
#Server side storage copy
$SourceStorageAccount = "myStorageAccount"
$SourceStorageKey = "myKey"
$SourceStorageContext = New-AzureStorageContext –StorageAccountName $SourceStorageAccount -StorageAccountKey $SourceStorageKey
fails with the error
At E:\DeploymentScripts\Storage\Test.ps1:6 char:51
+ ... geContext –StorageAccountName $SourceStorageAccount -StorageAccount ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The string
is missing the terminator: ".
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
The strangest part is if I copy and paste the contents of the ps1 file into a PowerShell command line, it works fine !? What's going on?
Obviously I have removed my storage container name and key, you will need to assign your own Azure storage account name and api key to replicate it.
EDIT: A screen shot of the script edited in Notepad++ with all characters visible...
It's similar with this question.
When you copy cmdlets from Web, maybe there are some special characters. I suggest you could copy the cmdlets to Notepad then copy to PowerShell.
It's helpful to use cat filename.ps1 in the terminal you can see determine which characters are bad, it's not obvious in the editor.
So parts of the code are copied and pasted from websites which have non-standard dash characters. I found it easier to see the characters when you use the cat command from the powershell command line to list the file
Here's a screenshot of what it looks like listed in the powershell:-

Does the Powershell command "sendkeys" work in Jenkins? If not, is there an alternative method?

I've been trying to create a PowerShell script in Jenkins that input keyboard commands to test if various fields and quick key shortcuts are working.
For example, I use the following to enter a 'quick key' event that will close the application (Alt+X).
Add-Type –AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait("%{X}")
This works fine in powershell ise on my desktop, but when used in jenkins it returns the error:
Exception calling "SendWait" with "1" argument(s): "Access is denied"
At C:\WINDOWS\TEMP\hudson3939198379009014854.ps1:9 char:42
+ [System.Windows.Forms.SendKeys]::SendWait <<<< ("%{X}")
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
At first I thought this was a permissions issue, but someone suggested that Jenkins cannot run SendKeys because Jenkins is in non-interactive mode, and sending a key is an interaction.
Does anyone know if this is true? And if so, is there an alternative method for testing these quick keys?
For fields I can simply input a $variable.value, but for quick keys that don't have an input, I'm not so sure.