Archive for category PowerShell
I’m happy to announce the release of PowerShell CodeManager 6.0! :-)
This one took me a while, mainly due to work and also for this release, I finally wanted to fix a few rare but nasty bugs. And I did, but it took me into old, dusty parts of the code, which I wrote in the very beginning, 8 years ago. This was shortly after I had started to learn PowerShell and looking at it now, well, lets say there is room for improvement. :)
So improvement and speed is the general focus this time, so apart from a few visible nice features, there are a lot of small changes and handling improvements, which you will notice when you use certain functions.
So here is whats new:
Graph calculation for large scripts, as well as applying filters is twice as fast as before
You can now filter as many functions as you like, either by selecting them in the all-functions overview or directly in the graph. This gives you the ability to quickly and easily create the graph you want.
New Options for colorization and function node display are available in the options bar
Search Result Filter
You can now apply quick-filters for all or selected search results, and save these as a preset as well.
Launch snippets directly from CodeManager with quick access to command line options
Improved File Monitor
CodeManager reacts faster to changes in the monitored locations and further limits necessary re-indexing
– New tooltip/quick info – details for all objects in the snippet/script explorer
– Improved support for PowerShell modules
– New keyboard shortcuts added (see help file for complete list)
This was high on the wish list, so the code windows now features line numbering and a current-line indicator
Improved Inside Code Search
Faster, with improved “mark all results”-feature
Improved Script Edit Mode
Inline syntax coloring and search support
Faster Syntax Coloring
Large scripts are displayed about 4 times faster than before
As well as about 60 bugfixes and countless little handling improvements.
Unfortunately due to provider trouble the auto-updater in v5 does not work anymore, so please download the installer (or Zip) manually on CodeManagers home base: here.
Have a nice day!
I’m happy to announce the release of PowerShell CodeManager 5.0!
CodeManager? Yes, I changed the name again. :) But not (just) for fun. As the added support for scripts in the last version might have indicated, this tool is becoming more and more about PowerShell code in general, not just in the form of snippets.
So this time I did not (just) built in the usual annual improvements about handling snippets. For this 5th anniversary release, I implemented a whole bunch of great new features. One of these new features for example, tells me that this version has 14004 lines of powershell code, including 193 functions and that I used 1725 unique variables and is therefore not just feature-wise the biggest update for this tool yet. :)
So here is whats new:
The new Visualizer creates interactive function dependency graphs. That means it displays all the functions of a script and connects them, to depict how they interact with each other and from where they are being called.
Interactive Map –Each element of the graph can be clicked to show the code of the selected function and the position from where a function is being called.
Documentation – Document the logical structure of your script. Graphs can be printed and saved either as a PNG image or in vector format to allow further editing in any vector capable graphics tool.
Zoom in – Graphs can be created for complete scripts, as well as single functions and their relations.
Customize – You can choose between different layout algorithms, connector-types and color schemes. Nodes and connectors can be manually rearranged.
Code Manager (former “Snippet Injector”)
Function Explorer – Overview and quick direct access to all functions in a script, module or snippet
Script Execution – Launch scripts directly from CodeManager with quick access to command line options
File Monitor – CodeManager now watches all locations for changes and quickly and quietly updates any changes made outside code explorer
Partial Reindexing – Helpful for larger script and snippet libraries: in most cases, necessary re-indexing is now limited to the folder the change occurred in.
Quick Search Option Buttons – For inside script code search and regular expressions
Custom Font Settings – Font type and size can now be set for the code window and code explorer
– Support for PowerShell modules
– Full set of explorer functions now supported
– New keyboard shortcuts added (see help file for complete list)
– Performance Options for slow computers regarding syntax coloring of huge scripts and code search
Info Window – Quick info to file -path, -size, -attributes, -hash, -description and code statistics.
Inside Code Search – Next-/Last-result buttons to click though all search results / highlight all results option
Edit and Save Scripts – Not meant for script writing (yet J), but useful for quick changes and before execution edits
Quick Snippet creation – From selection inside code window
New Design / Dark and Bright Theme available
Four Sizes to choose from
Sounds good? Then…
Either turn on the update-check in Snippet Manager 4 or download the installer (or Zip) manually on CodeManagers home base: here.
Have a nice day!
Hi, some people have been reporting an issue with the “Add Location”-buttons when using Snippet Manager on Windows 10. This update takes care of the problem and fixes a few minor issues with the installer as well.
You can get the update as always via the internal update function or download the msi or zip here.
Have a great day,
Hi everybody, i’d like to announce the release of Snippet Manager & Injector v4! This time it’s all about speed and comfort. There are some very nice new features, but my focus was: improvement.
Script Files Support
The Injector now indexes and searches your script (ps1) files!
Snippets are great. But, as fast and easy they are created with Snippet Manager, you still need to create them. And you will, very soon, but today you need a function that does … and you know you already did something exactly like this a while ago. Mhm… but what was the name of that script again…?
You can now quickly find a certain script and re-use some of its code. Just type the name or some of the code you are looking for in the search box… done!
Manager and Injector now support regular expressions in all search fields.
– Injectors Code Preview Window now allows to scroll and select parts of the snippet or script code
– Selected code gets copied to clipboard or loaded into auto-injector automatically
– Injector now supports multiple snippet or script locations
– Injector and Manager explorers have separate location lists to allow each explorer being customized for it’s task
– Drag and Drop File and Folder operations
– … and lots of other improvements like: Large Quick-hide Buttons, Expand and Collapse Buttons, a hide-emtpy-folders option etc.
Location indexing and Search speed have been massively improved. On a fast local drive, Injector can search code in thousands of scripts and display its results in under 2 seconds!
Resizable “Floating Launcher”
This has been wished for, so now you can choose three different sizes for the floating launcher button. Happy? :)
Open in External Editor
You can open scripts via double click from Injector in any editor capable of handling powershell scripts.
That way Injector can even serve as an easy access, de luxe “open file” dialog for your script editor, complete with search function!
Start Mode Option
You can now simply set in the options menu, what you want to see when you start Snippet Manager: the Manager window, the Injector window or just the floating launcher button.
And also countless small fixes and nice handling improvements you will discover by yourself… :)
Either turn on the update-check in Snippet Manager 3 or download the installer (or Zip) manually on SnippetManagers home base: here.
That’s it, I hope you enjoy the new Snippet Manager and Injector and as always: please don’t hesitate to contact me.
Have a nice day!
After months of night shifts, I am very pleased (and a little bit proud) to announce the launch of Snippet Manager & Injector v3! With about 8000 lines of Powershell code, it’s (literally) the biggest update for SnippetManager yet. :) It has really exciting new features and countless improvements and fixes. And did i mention it is of course still completely free?
In short, if you are using snippets, you will love this.
Here’s what’s new:
The Snippet Injector!
Well, there has always been a “weak link” in the otherwise great “using code snippets”-idea. And that is: how to most quickly and comfortably find and insert the snippet you need. The insert-snippet pop-ups in PowerGui and ISE are suboptimal at best: Way too small, no search possible and ISE does not even support folders! (see, i do read your emails) :)
So in other words, if you have more than a couple of snippets or maybe want your snippets on a network share, you are screwed.
This is where the Injector comes in. The Injector is a pop-up window, that appears on the side of the screen, lets you search and select a snippet and with the next click (or hotkey press) inserts the snippet into your editor. Any editor.
The Injector has many nice features like Tooltips with syntax coloring, supports different ways of Snippet injection and can be customized in various ways.
Sounds good? :)
This is how it looks like:
Find more videos on Snippet Managers homebase.
If you need a pre-coded solution for a task or problem in your script, you can now simply search on PoshCode.org from inside SnippetManager. It’s fully integrated, so you search as you would for local snippets. The results appear in the SnippetExplorer with their description and can be used by a click.
This is just the start of the integration of web-sources and -storage (nope, i did not say cloud, no no…. :)). There is much more to come.
Custom Syntax Coloring
It always sounds a bit unimportant, but it is not: Syntax coloring lets you read and comprehend code faster. And if you have found your optimal colors, it’s a distraction if any of your coding tools uses different ones.
So now aside from the two shipped coloring schemes (ISE color scheme, SnippetManager color scheme) you can create your own scheme. Fine tune the existing schemes or create a completely new one. Either way, odd colors won’t distract you anymore.
Better Network Support
This has been wished for, so i did my best to remedy the most urgent problems: SnippetManager should now run smoothly from network-shares, work with shared snippet repositories and supports roaming profiles. Happy? :-)
More new features and improvements are:
# Improved SnippetExplorer
# “Floating Launcher” – Movable button to quickly launch Injector or Manager
# Notification Icon – quickly launch Injector or Manager. Can be used together with or instead of the floating launcher.
# Completely new Design! And with fancy stuff, like graphical buttons. Yay! :)
# All settings, window positions and slider positions are stored and restored via the settings file now.
And countless small fixes and handling improvements…
Snippet Manager 3 does not come via auto-update at the moment, because I have a little bit of trouble with the free msi-creator I used for v2. This might take me a few more days.
Fixed the installer issue. Thanks to the guys at Caphyon!
So either turn on the update-check in Snippet Manager 2 or download the installer manually on SnippetManagers home base: here.
On that page is also a Basic Snippet Pack ready for download now, to get you started if you have no snippets yet.
That’s it, I hope you enjoy the new Snippet Manager and Injector as much as I do.
Have a nice day!
Just a short announcement:
Snippet Manager V3 will be released
very soon. Tomorrow!
It’s packed with new great features like… ehm.. no. Let me surprise you. :)
I will just say that searching and inserting Snippets will be much easier than before, no matter what editor you use. And there is much more…
So turn on SnippetManagers auto update-check, so that you will be notified when V3 launches.
Have a nice day,
I’m very happy to announce that SnippetManager 2 is finally done. About 5000 lines of Powershell code, packed with new features and improvements! :-)
SnippetManager now fully supports the ISE snippets format. SnippetManager displays all your ISE snippets and you can edit them, create new ones etc. anything you could do with your PowerGUI snippets (except for the placeholders, they are not supported by ISE yet)
You don’t have any ISE snippets yet but a lot of PowerGUI snippets? Then you might need the:
ISE <-> PowerGUI Snippet Converter
You can easily convert all (or just a few of) your snippets from PowerGUI to ISE (and back) with just a click. Simply go to the Converter tab, select all the snippets you like to convert (ISE, PowerGUI or both; single files or complete folders) and hit the conversion button. Done!
With the new quicksearch-box you can now even faster find the snippets you are looking for. Just open SnippetManager and start typing a name, keyword, command… etc.
Full Syntax Coloring
SnippetManager now provides full syntax coloring, even while typing. (Powershell V3 required)
Included are currently two coloring shemes (easily changable via the options menu): An ISE color sheme, which looks exactly like the colors in ISE and a (more moderatly colored :)) SnippetManager color sheme.
More new features and improvements are:
# SnippetExplorer drag and drop capability (yeah I know, but now it’s there :) )
# Faster Snippet Processing (up to 10x faster for large snippets)
# New Design!
# More commands/menue items support keyboard shortcuts (the available shortcuts are shown in the tooltip of the item)
# and well, not really a feature, but you may have noticed that it’s not called “PowerGUI SnippetManager” anymore. I thought that might irritate the ISE folks, so I called it “Powershell SnippetManager”. Yes, I went really crazy creative there. :)
And finally, one important change:
SnippetManager is now a standalone tool, not a PowerGUI add-on anymore. That means (for now):
# if you update SnippetManager from inside SnippetManager v.1.x, nothing really changes (except for all the cool features of course), you will still be able to start it from inside PowerGUI. You also get the desktop shortcut.
# if you download and install SnippetManager by yourself, it should be started via one of it’s shortcuts on the desktop and start menu.
I will however release “launcher”-add-ons for both PowerGUI and ISE later this year, so that you can use it even more conveniently. I haven’t decided yet, if i will bother everybody with it via the update function :), so if you are interested, better subscribe to this blog or check SnippetManagers home from time to time.
You can update SnippetManager via the update function (just turn on the “Check for Updates”-option) or download it on it’s home page: here.
That’s it, I hope you enjoy the new SnippetManager as much as I do.
Have a nice day!
Die Benutzerakzeptanz ist ein oft unterschätzter und vernachlässigter Faktor bei der Planung und Umsetzung von IT-Projekten in Unternehmen. Während bei Internetumgebungen der „User Experience“ und damit in der Konsequenz der Benutzerakzeptanz ein immer höherer Stellenwert eingeräumt wird, spielt diese bei IT-Umgebungen in Unternehmen oft -wenn überhaupt- nur eine untergeordnete Rolle. […]
thanks to all of you who did send me bug reports and suggestions for the SnippetManager add-on in the past.
Now SnippetManager is going to evolve from an add-on to a stand-alone application.
In fact, due to some restrictions in the PowerGUI SDK, it always has been, more or less. The add-on is merely an icon and a launcher for the actual SnippetManager, with which you always could edit any snippet file. But until now, it has been specially customized to work smoothly with PowerGUI.
This will not change.
But, i would like to broaden its usefulness and e.g. support other editors. But, more about that later… :)
I also would like to build in a few new features. I have some in mind, but i would like to hear:
– if you have something that you would like to see in v2 or
– if there is something that is bugging you in the current version
If the answer is yes, please send me an email with the subject “SnippetManager Suggestion” to:
You could also post a comment here, but i prefer mails, because they do make follow-ups easier.
Thanks and have a nice day,
As admins, we are used to digging through heaps of monochrome, barely formatted data, searching, selecting, sorting, filtering, until we got what we were looking for. That’s our job, that’s how we think, that’s what we lo…I get carried away. :)
My point is, while you might appreciate nicely presented, simplified data, you don’t consider it vital. So why would anybody else? The short answer is: what the technician considers ‘interesting information’, to the manager (and other uninitiated folk), it’s like Vogon poetry. They usually get bored and annoyed by technical details and things they don’t understand, which covers basically 99% of what you do. They like it simple and colorful. And they do love charts.
Microsoft Chart Controls
Microsoft Chart Controls (MCCs) is a great tool to spice up reports created by your monitoring script or to make your weekly log file analysis ‘management compatible’. You can create a wide range of different chart types (see “Chart Types” gallery above) , with almost complete freedom of design over the whole thing. And when you’re done, you can display your chart in a GUI (e.g. Windows Forms) or save it as a graphics file to include it in a HTML report or email.
MCCs provide you with a huge set of classes to create your chart. And while they all offer interesting possibilities, only a few are really important at the beginning. A standard chart created with MCCs basically consists of three essential elements: a Chart object, a ChartArea object and one or more data Series.
To understand how they fit together, it’s easiest to visualize them as layers, which sit on top of each other:
The Chart object is the first object you create. All other elements get attached to this object. It has a lot of properties which are only useful when you want to display your chart in a GUI. But it also determines the size of your chart(s).
The ChartArea object defines how the chart grid looks like, it also holds the axis titles and some overall design options (more about that later).
The data Series makes your chart a chart. It not only defines the displayed values (data points), but it also sets the style (“type”) your data is displayed in.
Although the whole thing has it’s logic, some settings (properties) are located where you wouldn’t expect them to be.
For example, nearly all of the style settings (which define how your data is presented) are set via the Series’ properties. So you probably would expect that if you want the chart to appear in a 3D style, this would be set there as well. But because this setting affects all Series in a ChartArea, you need to set the 3D style via the ChartArea object.
I tell you this simply because, if at some point you find yourself wondering why a certain detail of your chart apparently can’t be configured, you might just be looking in the wrong place.
In general, a Chart object can hold multiple ChartAreas and a ChartArea can hold multiple data Series. (unless you use certain chart (style-) types which can only display one data series. Check the chart type gallery above for examples, e.g. pie, funnel, pyramid etc.)
There is one other object displayed in the illustration above, the Legend object. It defines (you guessed it) how the charts legend will look like. It’s optional, but useful if you have more than one data Series in your chart.
Alright, enough theory, let’s make an example:
If you have the .NET framework v4.x installed on your pc you already have all you need.
For .NET v3.5 Sp1 you can install MCCs as an ‘add-on’. You can get the installation package here.
Example: Memory Usage Chart
For this tutorial we will create a chart that shows your pc’s top 5 processes by memory usage (private memory and virtual memory) and save it as a *.png-file.
We start by loading the necessary assembly and determine the script’s home path, because that’s where we save the chart-image to.
Now we create the Chart object.
As we won’t display this one in a GUI, we only need to set a few properties here: size and backcolor. (If you would however want to display in in a GUI, you simply need to set the same properties and follow the same procedures here as with all WinForms elements (tutorial).)
BTW, when i say “chart“, i mean the whole diagram we’re creating here and when i say “Chart object” i mean the instance of the .NET-object we’ve just created and named “$chart1”.
Then we add a title for the chart. A Chart object can have multiple titles (e.g. a title and a subtitle, or a title for each ChartArea attached to this Chart object), so we create it by adding it directly to it’s title collection (called “Titles“).
And because this the first title in the collection, we refer to it like we do to any collection’s first element (), when we set the properties for font and alignment.
Next in line is the ChartArea.
As mentioned before, a Chart object can have multiple ChartArea objects. Per default, they will automatically share the available space of the Chart object (determined by the Chart object’s height and width properties). But you can also customize the location and size of each ChartArea by setting the “$ChartArea.Position.Auto” – property to $false and set size and position yourself (see also here).
For now, we are happy with the default behavior, so we just set the titles for the X and Y axis of the chart grid and as well as the axis’ interval. The interval should be set according to the data you will display there. On the X-axis we’ll display only the five processes, so we want to have a grid line for every process. On the Y-axis, the memory values (in MB) will be displayed. They can be quite high, so we draw a line only for every 100 MB.
You can also customize a lot of other things here, e.g. if you want to have your chart in a 3D style or apply shadows, you need to set this here as well.
We’ll also need a Legend object, because we’ll have two data Series in the same ChartArea and it’s probably a good idea to be able to tell which is which. :)
Like the Title(s), a Chart object can have multiple legends, so it’s a collection our legend gets added to and like with the ChartArea, you could override the auto-placement and sizing, if you want to.
There are a couple of other design options, just try them out.
You might wonder why we don’t configure the actual contents (color and text) of the legend here. That’s because they get automatically added when we assign the data Series’ to this legend.
To be able to fill our chart with the desired content, we need a data source. So we just use get-process, sort by private memory size and take the top five entries of the list.
Ok, now before we can add a data Series, we need to talk about DataPoints for a moment.
Every value displayed in your chart is represented by a DataPoint. And every data point is a member of a DataPointCollection. And finally the DataPointCollection is attached to a data Series, which defines how and where the data is displayed.
Usually a data point displayed in a chart has two values: one X- and one Y-value. But in some chart types, there can be up to six Y-values for each DataPoint. Why? Take a look at the illustration:
To display a range-type chart for example, you need to be able to set where the range should start and where it ends. So you need two Y-values. Here is a good overview over the chart types and their particularities. The X- and Y-values of a DataPoint can’t be empty, if one is, it’s automatically set to zero instead.
On the X-axis, you can also display a string instead of a numeric value (like we want to display the process names there). But the “.XValue” – property of a DataPoint has to be numerical. So to achieve that you need to assign the string to the “.AxisLabel” – property of the DataPoint instead.
Now we add our first data Series.
We create it by setting a name for the Series and adding it directly to the chart’s Series collection. Then we set the chart type to column. When choosing the type, there is one important thing to consider: You know already that a ChartArea can have multiple Series. You can even combine different types in one ChartArea (you can combine a line chart with a point chart for example), but some types aren’t compatible with each other (here you can see what types can be combined).
You can decide if a Series is displayed in the charts Legend by setting the “.IsVisibleInLegend” – property and assigning the Legend’s name to the “.Legend” – property.
You also need specify the name of the ChartArea in which this Series should be displayed.
For the DataPoints, instead of creating them one by one, you can feed a data source via the pipeline to the “.AddXY()” – method of the Series’ DataPointCollection “.Points”, like we do here. (there are also a few other options, but that’s for another tutorial)
This way, we don’t even have to care that one value is numerical and the other a string. They get added automatically to the right property.
Adding the second Series works exactly the same, only this time we feed the value of PrivateMemorySize:
Finally, we want to save our chart to a image file. For that we use the “.saveImage()”-method of the Chart object. You can choose from various file formats.
If you now run the script and open the png-file, your chart should look something like this:
And here’s the whole script:
I hope this tutorial has helped you understand the basic concept of MCCs. What you’ve learned today is a good basis, but it’s just a fraction of what you can do with MCCs.
One last tip: an easy, ‘WYSIWYG’-way to experiment with all the different possibilities, chart styles and visual options, is to get a copy of Visual Studio Express. Just create a plain windows form, add a chart object and try out what all the properties are there for.
Have a nice day,