I think some of the most trouble I've recently had in coding Powershell has been trying to run an executable on a remote Hyper-V VM that was located under Program Files and then actually getting the response back properly so I could iterate though the results.
The first trickiness was with running the command properly when there were spaces in the path.
In double quotes you have to use the ampersand (&) and then write the path to the EXE in single quotes and then at the end of the string before the closing quotes character, append an argument.
For example :
$commandLocation = "& 'C:\Program Files\....\application_name.exe' argument"
This is the proper syntax that you can then pass to an Invoke-Expression that's inside a ScriptBlock called by Invoke-Command. Invoke-Expression is a very helpful commandlet to run EXEs, when, for example, running Powershell on a remote machine.
The second issue was understanding how I could use Write-Output to pipe the remote call output back a Powershell variable within the ScriptBlock that I could then use in the calling function.
I read that you could use 4>&1 at the end of the ScriptBlock but never found it useful in my case.
In my case, I just had a ScriptBlock assigned to a variable and then ran the ScriptBlock using an Invoke-Command on a separate line.
There was some funkiness with WriteHost appending to the invoke-command so you have to disable that and then return the pure unadulterated Invoke-Command Result that I assigned to a variable.
Then I could iterate over the lines in the method that called the method below.
Here's the example code :
Function RunCommandOnRemoteMachine([string] $blahParameter, [string] $remoteMachineAddress)
{
$defaultBlahCommandLocation = "& 'C:\Program Files\...\blah.exe' "
WriteLogAndConsole "Default blah directory : $defaultBlahCommandLocation"
$fullCommand = $defaultBlahCommandLocation + $blahParameter
WriteLogAndConsole "Full command with arguments being run : $fullCommand"
$scriptToExecute = { param($passedCommand)
begin {
Write-Host "Start of command:"
}
process {
$consoleOutput = Invoke-Expression -Verbose -Command $passedCommand
}
end {
Write-Host "Output from remote command:"
Write-Host $consoleOutput
Write-Host "************"
Write-Output $consoleOutput
}
}
$blahCommandResult = Invoke-Command -Session $global:session -Verbose -ScriptBlock $scriptToExecute -ArgumentList $fullCommand
#Write-Host "Result of blah argument command: " $blahCommandResult
return $blahCommandResult
}
Friday, February 03, 2017
Thursday, January 19, 2017
Powershell New-PS Drive using Administrator credentials. User name or password is incorrect
Sometimes you forget the obvious when your doing scripting.
Although not recommended, I was using powershell to create a new psdrive session using the Administrator.
Problem is that with just Administrator and the password, powershell was complaining about a bad username and password combination.
Since the VM was connected to a development domain I wasn't qualifying the Administrator name therefore confusing powershell.
I add the computername\Administrator and tried again. Much better success
Although not recommended, I was using powershell to create a new psdrive session using the Administrator.
Problem is that with just Administrator and the password, powershell was complaining about a bad username and password combination.
Since the VM was connected to a development domain I wasn't qualifying the Administrator name therefore confusing powershell.
I add the computername\Administrator and tried again. Much better success
Wednesday, December 21, 2016
Elasticsearch analogies
I work a lot with Elasticsearch.
At my job we have migrated from using SQL Server to Elasticsearch for log storage.
Sometimes, when you're learning new grammar for a new technology you're working on it's nice to have metaphors or similes to use when learning the component parts.
One of the best similies I've heard of for what Elasticsearch represents is that it's like an index at the end of a book. Additionally, Elasticsearch by many, even those who work at Elastic, consider it not a DB.
If you start using Elasticsearch a lot more you'll begin to work with types, templates and mappings.
A type could be analogous to a regular SQL table.
Mappings could be similar to a a table column that stores a field a certain way that could be something like a string, int, varchar.
How mappings and settings are created and loaded has changed from Elasticsearch 1.x to 2.x+. Now that we use Elasticsearch 2.x we have to load template files that are used when new indices are created. They combine settings and the mappings for the fields that get parsed out and placed into an index.
Thanks to this website for giving me those Aha! analogies.
http://swops.com/blog/elasticsearch-mappings-and-templates
At my job we have migrated from using SQL Server to Elasticsearch for log storage.
Sometimes, when you're learning new grammar for a new technology you're working on it's nice to have metaphors or similes to use when learning the component parts.
One of the best similies I've heard of for what Elasticsearch represents is that it's like an index at the end of a book. Additionally, Elasticsearch by many, even those who work at Elastic, consider it not a DB.
If you start using Elasticsearch a lot more you'll begin to work with types, templates and mappings.
A type could be analogous to a regular SQL table.
Mappings could be similar to a a table column that stores a field a certain way that could be something like a string, int, varchar.
How mappings and settings are created and loaded has changed from Elasticsearch 1.x to 2.x+. Now that we use Elasticsearch 2.x we have to load template files that are used when new indices are created. They combine settings and the mappings for the fields that get parsed out and placed into an index.
Thanks to this website for giving me those Aha! analogies.
http://swops.com/blog/elasticsearch-mappings-and-templates
Rebuild project of 18 year old Mansfield Toilet
I just completed a toilet rebuild last weekend. The toilet began leaking a year or two ago; especially during warm weather.
Although I wasn't working the whole time the total time from start to finish was a half day. I did initial work and investigations starting Friday night, I let the tank dry out overnight, and I finished about 1 PM the following day having started around 10 AM with the installation of the new parts on the tank.
Actual time working was probably around 4 hours.
Work entailed replacing the fill valve, flush valve, new bolts attaching the tank to the bowl, new shutoff valve and supply line too.
Although I wasn't working the whole time the total time from start to finish was a half day. I did initial work and investigations starting Friday night, I let the tank dry out overnight, and I finished about 1 PM the following day having started around 10 AM with the installation of the new parts on the tank.
Actual time working was probably around 4 hours.
Work entailed replacing the fill valve, flush valve, new bolts attaching the tank to the bowl, new shutoff valve and supply line too.
New shutoff valve
New Supply Line to Tank
All parts replaced in dry tank
Tank full with water
All parts were ordered from Mansfield and the cost was just under 50 bucks. I went to Home Depot for the new shutoff valve and supply line.
Total cost was about 60 bucks.
Issues encountered after the replacement was slight leaking from one of the bolts, which I had to tighten down more to prevent further leakage.
As mentioned on my Twitter post, I'd say this home project was a 2-3 out of 10.
Wednesday, July 20, 2016
Perl : subroutine redefined, prototype mismatch
I was refactoring my code and placing some common methods into a base module in my Perl lib directory.
Unfortunately some of my new method names had name collisions with possible subroutines in other packages.
I was able to rename the methods that I was exporting for use in my PL files and the errors went away.
Unfortunately some of my new method names had name collisions with possible subroutines in other packages.
I was able to rename the methods that I was exporting for use in my PL files and the errors went away.
Wednesday, March 30, 2016
Python Indentation Error
I've only been using Python for a year.
The error might be considered a red herring since the problem with the else: statement was that there was no real code to run after the if statement.
The error went away.
Before that, my focuses were Java and Perl.
An interesting error I came across, since Python has stricter criteria for formatting was: "IndentationError: expected an indented block"
The code in question:
The error might be considered a red herring since the problem with the else: statement was that there was no real code to run after the if statement.
Once I added a logging statement:
The error went away.
Friday, June 12, 2015
Setting up a new hyper-v Windows 2012 server to be pingable and allow RDP connections
At my current company we are needing to test deployments not only to Linux but Windows too.
To quickly have preconfigured systems come up we use virtualization (Hyper-V) along with other technologies like Vagrant and Ansible with other configuration and testing scripts like Python and/or Powershell.
I just setup a new Windows 2012 R2 Machine in Hyper-V using a ISO image.
By default, some features aren't enabled to make my testing easier. For example, to be able to ping the machine or RDP into it for GUI related tasks.
To enable Windows to respond to a ping you have to go into Windows Firewall with Advanced Security > Inbound Rules and enable File and Printer Sharing (Echo Request - ICMPv4-In) by right clicking on the rule name.
For remote desktop connections I had to do two things:
1) Type SystemPropertiesRemote and select "Allow remote connections to this computer." I also deselected the "Allow connections only..." beneath it
2) I ran this command: netsh advfirewall firewall set rule group="Remote Desktop" new enable=yes
If for some reason I disabled Allow remote connections again I would have to do the two steps again to get RDP to allow my remote client to connect.
Subscribe to:
Posts (Atom)
Exploring ELK (Elastic) Stack for hack-a-thon
At my current gig, our group finally got to do hack-a-thon week and I joined a team project that tied together a few of the technologies I...
-
When I first started using WebEx 3 years ago for my current job I accidentally set the WebEx One-click meeting topic to my colleagues' n...
-
I was having the toughest time trying to sync a new folder tree in my depot. I was getting this error: //depot/Some-path/some-sub-path/....
-
If you're doing security/cryptographic testing with Java - especially with JMeter - you might encounter errors in your testing where you...