<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Scripting &amp; Automation on Wojciech Marusiak IT Blog</title>
        <link>https://www.wojcieh.net/categories/scripting--automation/</link>
        <description>Recent content in Scripting &amp; Automation on Wojciech Marusiak IT Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en-us</language>
        <lastBuildDate>Fri, 01 Dec 2023 08:27:58 +0100</lastBuildDate><atom:link href="https://www.wojcieh.net/categories/scripting--automation/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>How to remove annoying startup prompt in Windows Terminal</title>
        <link>https://www.wojcieh.net/how-to-remove-annoying-startup-prompt-in-windows-terminal/</link>
        <pubDate>Fri, 01 Dec 2023 08:27:58 +0100</pubDate>
        
        <guid>https://www.wojcieh.net/how-to-remove-annoying-startup-prompt-in-windows-terminal/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2023/12/windows-terminal-1.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Windows Terminal with annoying prompt&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Since switching my blog to static webpage generator Hugo I am using more and more command line tools and programming tools. For coding I am using &lt;strong&gt;Visual Studio Code&lt;/strong&gt;, on my macOS I am using &lt;strong&gt;iTerm&lt;/strong&gt; with &lt;strong&gt;Oh My ZSH&lt;/strong&gt; and of course &lt;strong&gt;GitHub&lt;/strong&gt; to store content of the webpage. However on Windows as the default I switched to &lt;strong&gt;Windows Terminal&lt;/strong&gt; as my main command line tool. But, on Windows 10 or 11 in Windows Terminal there is this annoying popup when you start it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Windows PowerShell
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Copyright (C) Microsoft Corporation. All rights reserved.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;In this post you will learn how to remove it.&lt;/p&gt;
&lt;p&gt;So back to in my opinion annoying post. Well, Microsoft I am already using the latest Windows Terminal and this popup is irrelevant and stupid.&lt;/p&gt;
&lt;h2 id=&#34;main-solution&#34;&gt;Main Solution
&lt;/h2&gt;&lt;!--adsense--&gt;
&lt;p&gt;Generally speaking solution is quite easy. You just need to add &lt;code&gt;-nologo&lt;/code&gt; parameter into the execution file before &lt;strong&gt;powershell.exe&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;removal-of-annoying-message-in-windows-terminal&#34;&gt;Removal of annoying message in Windows Terminal
&lt;/h2&gt;&lt;p&gt;In order to remove it in Windows Terminal we need to do following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to Windows Terminal Settings.
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2023/12/windows-terminal-2.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Windows Terminal Settings &#34;
	
	
&gt;&lt;/li&gt;
&lt;li&gt;In Settings search for powershell.exe&lt;/li&gt;
&lt;li&gt;After the powershell.exe add &lt;code&gt;-nologo&lt;/code&gt; argument.
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2023/12/windows-terminal-3.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Windows Terminal Settings without Prompt &#34;
	
	
&gt;&lt;/li&gt;
&lt;li&gt;Save setting and restart terminal.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2023/12/windows-terminal-4.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Windows Terminal with annoying prompt removed&#34;
	
	
&gt;
And voila, stupid prompt removed :)&lt;/p&gt;
&lt;!---
Get-ChildItem -Path . | select Name
--&gt;</description>
        </item>
        <item>
        <title>How to backup and restore vSphere Distributed Switch</title>
        <link>https://www.wojcieh.net/how-to-backup-and-restore-vsphere-distributed-switch/</link>
        <pubDate>Wed, 14 Jun 2017 07:00:04 +0000</pubDate>
        
        <guid>https://www.wojcieh.net/how-to-backup-and-restore-vsphere-distributed-switch/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/06/how-to-backup-and-restore-vsphere-distributed-switch-logo.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;how-to-backup-and-restore-vsphere-distributed-switch-logo&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;In one of the previous posts &lt;a href=&#34;https://www.wojcieh.net/how-to-backup-nsx/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;How to backup NSX?&lt;/a&gt; I showed you how the process of NSX backup. As a best practice, I suggested aligning NSX backup with vSphere Distributed Switch backup. Today I will show you how to backup and restore vSphere Distributed Switch.&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;h1 id=&#34;vsphere-distributed-switch-backup-usingvsphere-web-client&#34;&gt;vSphere Distributed Switch backup using vSphere Web Client
&lt;/h1&gt;&lt;ol&gt;
&lt;li&gt;Click Networking and click Actions from the main vSphere Web Client GUI.
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/06/backup-vsphere-distributed-switch-1a.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-1a&#34;
	
	
&gt;&lt;/li&gt;
&lt;li&gt;From the Actions menu click **Settings **and &lt;strong&gt;Export Configuration&lt;/strong&gt;. Choose &lt;strong&gt;Distributed switch and all port groups&lt;/strong&gt;. This allows us to have all settings exported and have full backup of vDS.&lt;br&gt;
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/05/backup-vsphere-distributed-switch-2.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-2&#34;
	
	
&gt;&lt;/li&gt;
&lt;li&gt;The final step is to save exported backup on the local disk.&lt;br&gt;
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/05/backup-vsphere-distributed-switch-3.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-4&#34;
	
	
&gt;&lt;/li&gt;
&lt;li&gt;Give the file meaningful name like &lt;strong&gt;backup_DATE_vCenter_vDS_NAME.zip&lt;/strong&gt;.
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/05/backup-vsphere-distributed-switch-4.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-4&#34;
	
	
&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;vsphere-distributed-switch-backup-using-powercli&#34;&gt;vSphere Distributed Switch backup using PowerCLI
&lt;/h1&gt;&lt;p&gt;Once we saved the backup using vSphere Web Client we can do the same with PowerCLI. Why would you do it from PowerCLI? The answer is automation. Backup using PowerCLI means you can schedule it as scheduled task and run it periodically.&lt;/p&gt;
&lt;p&gt;Use the following one-liner to export all vDS from vCenter Server.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-PowerShell&#34; data-lang=&#34;PowerShell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-VDSwitch&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Name&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vDS&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Export-VDSwitch&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Description&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;vDS Backup 15.05.2017&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Destination&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;c:\vDS_backup.zip&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Where &lt;strong&gt;vDS&lt;/strong&gt; is the name of the switch and &lt;strong&gt;vDS_backup.zip&lt;/strong&gt; is the backup filename.&lt;/p&gt;
&lt;p&gt;Of course, there are other (better or more complicated/sophisticated) ways to do it. Please check below blog articles for other ways to backup vDS using PowerCLI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://iislogs.com/steveschofield/2015/09/08/automate-backing-up-dvs-using-powercli-and-powershell/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer nofollow&#34; &gt;&lt;a class=&#34;link&#34; href=&#34;http://iislogs.com/steveschofield/2015/09/08/automate-backing-up-dvs-using-powercli-and-powershell/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://iislogs.com/steveschofield/2015/09/08/automate-backing-up-dvs-using-powercli-and-powershell/&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://vcdx56.com/2013/10/backup-vsphere-vnetwork-distributed-switches-using-powercli/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer nofollow&#34; &gt;&lt;a class=&#34;link&#34; href=&#34;http://vcdx56.com/2013/10/backup-vsphere-vnetwork-distributed-switches-using-powercli/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;http://vcdx56.com/2013/10/backup-vsphere-vnetwork-distributed-switches-using-powercli/&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;vsphere-distributed-switch-restore-usingvsphere-web-client&#34;&gt;vSphere Distributed Switch restore using vSphere Web Client
&lt;/h1&gt;&lt;p&gt;On the vDS where will we try restore I created two PortGroups. I will delete the whole vDS from Web Client and then we will restore it from the backup.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;As you see my inventory has only one vDS.
&lt;br&gt;
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/06/backup-vsphere-distributed-switch-5.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-5&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Navigate to vCenter Server level and click &lt;strong&gt;Actions/ Distributed Switch / Import Distributed Switch&lt;/strong&gt;.
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/06/backup-vsphere-distributed-switch-6.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-6&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What we have to do is to point to backup file previously created. I selected &lt;strong&gt;Preserve original distributed switch and port group identifiers&lt;/strong&gt;. It is done to force vCenter Server to assign the same value as the Managed Object ID to the key property during port group creation. Some applications might rely on port group identifier.
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/06/backup-vsphere-distributed-switch-7.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-7&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the &lt;strong&gt;Ready to complete&lt;/strong&gt; section we have a short summary of vDS, its uplinks and port groups. Hit Finish to finalize Distributed Switch import/restore.
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/06/backup-vsphere-distributed-switch-8.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-8&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Distributed Switch is successfully restored from the backup.
&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2017/06/backup-vsphere-distributed-switch-10.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;backup-vsphere-distributed-switch-9&#34;
	
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;vsphere-distributed-switch-restore-usingpowercli&#34;&gt;vSphere Distributed Switch restore using PowerCLI
&lt;/h1&gt;&lt;p&gt;Restore is nearly as easy as backup using PowerCLI. Simply execute one-liner listed below.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-PowerShell&#34; data-lang=&#34;PowerShell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;New-VDSwitch&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-BackupPath&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vDS_backup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;zip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Location&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SDDC&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;-KeepIdentifiers:&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;$true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Where &lt;strong&gt;-BackupPath &lt;strong&gt;is path to vDS backup file, &lt;strong&gt;-Location&lt;/strong&gt; is datacenter we restore vDS to and &lt;strong&gt;-KeepIdentifiers&lt;/strong&gt;&lt;/strong&gt;:$true&lt;/strong&gt; preserves port groups IDs.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;I hope you enjoyed this article about how to backup and restore vSphere Distributed Switch.&lt;/p&gt;</description>
        </item>
        <item>
        <title>Remove Custom Attribute script from Virtual Machines annotation</title>
        <link>https://www.wojcieh.net/remove-custom-attribute-script-from-virtual-machines-annotation/</link>
        <pubDate>Wed, 24 Jun 2015 14:02:40 +0000</pubDate>
        
        <guid>https://www.wojcieh.net/remove-custom-attribute-script-from-virtual-machines-annotation/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2015/06/powercli.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;PowerCLI&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;In Today post I would like to show you quick method of replacing annotations which quite a lot of people use to store details about Virtual Machines. As usual this short script was created to automate things rather than do it all manually.&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;p&gt;In my company we use annotations to store information about Virtual Machines. I was quite often asked about VMs I deployed three Years ago - like I remember it now 🙂 So to remove information about myself I used following script.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-PowerShell&#34; data-lang=&#34;PowerShell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;###&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Purpose        : Replace custom attribute in Virtual Machines&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Created        : 24.06.2015&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Author         : Wojciech Marusiak&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Pre-requisites : none&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;###&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Add-PSSnapin&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VMware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;VimAutomation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;Core&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;If&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$globale&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DefaultVIServers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;Disconnect-VIServer&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Server&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$global:DefaultVIServers&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Force&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$vCenter&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Read-Host&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Please provide name or IP address of the vCenter Server&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$credentials&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;get-credential&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;connect-viserver&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-server&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$vCenter&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Credential&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$credentials&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$vms&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Get-VM&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;where &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;get-annotation&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Entity&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-CustomAttribute&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Creator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;Value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-eq&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;searched phrase&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$vm&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$vms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Set-Annotation&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Entity&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$vm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-CustomAttribute&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Creator&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Value&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Disconnect-VIServer&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*&amp;#34;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Confirm:&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;$False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;In my case I am replacing custom attribute &lt;strong&gt;Creator&lt;/strong&gt; with space. If you want to replace another custom attribute you first need to find it.&lt;/p&gt;
&lt;p&gt;To show which custom attributes you have run following oneliner.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-PowerShell&#34; data-lang=&#34;PowerShell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;get-vm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-name&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vmname&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Get-Annotation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2015/06/replace-custom-attribute.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Replace custom attribute - 1&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Afterwards simply change in line 16 value for -CustomAttribute and in line 18 the one in quotation mark.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.wojcieh.net/images/uploads/2015/06/replace-custom-attribute-2.webp&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Replace custom attribute - 2&#34;
	
	
&gt;&lt;/p&gt;</description>
        </item>
        <item>
        <title>Znalezienie odłączonych sesji terminalowych z pomocą Powershella</title>
        <link>https://www.wojcieh.net/znalezienie-od%C5%82%C4%85czonych-sesji-terminalowych-z-pomoc%C4%85-powershella/</link>
        <pubDate>Fri, 03 Aug 2012 09:19:14 +0000</pubDate>
        
        <guid>https://www.wojcieh.net/znalezienie-od%C5%82%C4%85czonych-sesji-terminalowych-z-pomoc%C4%85-powershella/</guid>
        <description>&lt;p&gt;Piątek. Ostatni dzień pracy - próba logowania do vCenter. Błąd&lt;/p&gt;
&lt;!--adsense--&gt;
&lt;p&gt;Kolejna - błąd. Oczywiście pojawia się pierwsza myśl - &lt;strong&gt;WTF!?!&lt;/strong&gt; Nie zrażając się następuje kolejna próba logowania do serwera przy użyciu RDP. &lt;strong&gt;Konto zostało zablokowane.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;przyczyna&#34;&gt;Przyczyna
&lt;/h2&gt;&lt;p&gt;Jak zwykle okazało się, że miałem zostawioną sesję terminalową na serwerze - w tym przypadku sprzed 192 dni.&lt;/p&gt;
&lt;h2 id=&#34;rozwiązanie&#34;&gt;Rozwiązanie
&lt;/h2&gt;&lt;p&gt;Jak zwykle bardzo proste: wylogowanie sesji i odblokowanie konta. Wkurzyłem się niemiłosiernie bo to już kolejny raz w ciągu miesiąca więc postanowiłem coś z tym zrobić.&lt;/p&gt;
&lt;p&gt;Chwila spędzona z goolge i udało mi się znaleźć moduł &lt;strong&gt;Terminal Services&lt;/strong&gt; do Powershella. Ściągamy go stąd - &lt;a href=&#34;https://psterminalservices.codeplex.com/&#34; target=&#34;_blank&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://psterminalservices.codeplex.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://psterminalservices.codeplex.com&lt;/a&gt;&lt;/a&gt;/ i instalujemy według instrukcji.&lt;/p&gt;
&lt;p&gt;Po zainstalowaniu odpalamy Powershella i wykonujemy komendę:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-PowerShell&#34; data-lang=&#34;PowerShell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-TSSession&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-ComputerName&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NAZWAKOMPUTERA&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-State&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Disconnected&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-UserName&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;USERNAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Jeżeli chcemy zobaczyć wszystkie odłączone sesje na komputerze to usuwamy&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UserName USERNAME
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Oto przykładowy skrypt utworzony z pomocą kolegi (pętla ForEach 🙂 ). W skrypcie pobieram komputery z Active Directory, które mają w nazwie ciąg znaków - można użyć *.&lt;/p&gt;
&lt;p&gt;Przykładowo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-PowerShell&#34; data-lang=&#34;PowerShell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Name -like &amp;#39;L*SR*&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Co pozwoli znaleźć wszystkie komputery zaczynające się od litery &lt;strong&gt;L&lt;/strong&gt; i zawierające w nazwie &lt;strong&gt;SR&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-PowerShell&#34; data-lang=&#34;PowerShell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Import-module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ActiveDirectory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Import-Module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PSTerminalServices&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$Computers&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;Get-ADComputer&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-Filter&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Name -like &amp;#39;L*SR*&amp;#39;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;ForEach-Object&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ForEach&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$Computer&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$Computers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;Get-TSSession&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-ComputerName&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$Computer&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-State&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Disconnected&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-UserName&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_k748050&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-ErrorAction&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SilentlyContinue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;W skrypcie dodałem również kontynuację po błędach - ponieważ komputer może istnieć w AD ale może być niedostępny i skrypt zatrzymuje się bo nie odpowiada &lt;strong&gt;RPC&lt;/strong&gt;.&lt;/p&gt;</description>
        </item>
        
    </channel>
</rss>
