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?
Related
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
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]
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.
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.
I have a load.PS1 and it loads 'Microsoft.SqlServer.Smo' as below
[System.Reflection.Assembly]::load('Microsoft.SqlServer.Smo') | Out-Null
it works well when I use the ISE to load and run it , but get error when I run it in the powershell shell or use as "powershell -command ".\RemoveInvalidSSRSAgentJob.ps1 xxxx" as below
Exception calling "Load" with "1" argument(s): "Could not load file or assembly
'Microsoft.SqlServer.Smo' or one of its dependencies. The system cannot find t
he file specified."
At line:1 char:38
+ & {[System.Reflection.Assembly]::load <<<< ('Microsoft.SqlServer.Smo') | Out-
Null}
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
how can I set it so that it can work in the powershell shell or command?
Thanks
You can workaround using
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.Smo')
but this method it's declared 'obsolete' from microsoft and in future can be eliminated.
The method load fails because it loads an assembly given the long form of its name but your ar passing to it a partial name: Read here.
And I find really strange that in ISE works, for me fails!