Windows – Supportscript for needed IT infos

For my job its important to get fast informations from users.
Most of them are always the same.
What is your actual IP address, whats your Hostname, do you have local admin rights, which networkprinters are connected and so on.
To get these Information fast and without explain the user every time how to get these Informations, I build a script for it.
This script will be added via GPO to every user’s startmenu.
This should work on all clients with PowerShell 3 installed.
This is what I build with Powershell.
First I added some variables for the actual date:
$vdate = get-date -Format d
After that I added a varibale for the path of the logfile and check if the file exists and if it exists to telete it:
$FileName = "C:\Users\" + [Environment]::UserName + "\Desktop\" + [Environment]::UserName +"_" + $vdate + ".txt"
if (Test-Path $FileName) {
Remove-Item $FileName

If you use DELL devices in your company, it’s important to have the Serial (ServiceTag) and the Express Service Code.
To get the Express Service Code (will be calculated from the Service Tag Value) I added a function to my script:
Function Get-ExpressServiceCode {
$ServiceTag = (Get-WMIObject -Class Win32_Bios).serialnumber
$Length = $ServiceTag.Length
For ($CurrentChar = $Length; $CurrentChar -ge 0; $CurrentChar--) {
$Out = $Out + [int64](([Math]::Pow(36, ($CurrentChar - 1)))*($Base.IndexOf($ServiceTag[($Length - $CurrentChar)])))

Now I added the Powershell command to receive the Hostname and write it to the Logfile:
$CN = "01. Hostname: "
$CN += get-content env:computername
$CN >> $FileName

Next, I added a script to check the local active IPv4 addresses and check if one of these is an IP out of our VPN range (change to your IP Range):
$ip=get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1}
$d = $ip.ipaddress[0]
$ip |foreach {
if($ip.VALUE -like "*")
{ $d = $ip.VALUE}
$ip = "02. IP-Address: "
$ip += $d
$ip >> $FileName

Now I added a script that checks if the User which is logged on have local admin rights and write the result in the logfile:
$LA ="03. Local Adminrights: no"
if(([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{$LA ="03. Local Adminrights: yes"}
$LA >> $FileName

Next step is to check the Vendor, the Model, ServiceTag and Express Service Code of your Client:
$vendor = "04. Vendor: "
$vendor += (Get-WMIObject -Class Win32_Bios).Manufacturer
$vendor >> $FileName
$vModel = "05. Model: "
$vModel += (Get-WmiObject -Class:Win32_ComputerSystem).Model
$vModel >> $FileName
$Service = "06. Service tag: "
$Service += (Get-WMIObject -Class Win32_Bios).serialnumber
$Service >> $FileName
$vESCode = "07. Express Service Code: "
$vESCode += (Get-ExpressServiceCode)
$vESCode >> $FileName

After that we add some code to get our actual BIOS Version:
$Bios = "08. Bios Version: "
$Bios += (Get-WMIObject -Class Win32_Bios).SMBIOSBIOSVersion
$Bios >> $FileName

The next Script will show the connected Printers including the Servername and the UNC Path of the Printer:
"09. connected network printers" >> $FileName
$Printer = Get-WMIObject -Class Win32_Printer| where {$_.Location.length -gt 1}
$Printer |foreach {
$prnName = "Name: "
$prnName += $_.ShareName
$prnName >> $FileName
$prnServer = "Printserver: "
$prnServer += $_.SystemName
$prnServer >> $FileName
$linkprn = "Link: "
$linkprn += $_.SystemName + "\" + $_.ShareName
$linkprn >> $FileName
" " >> $FileName

Now we have to theck the connected network shares:
"10. connected networkshares" >> $FileName
$vitns = Get-WmiObject -class "Win32_MappedLogicalDisk"
$vitns | foreach {
$vitnsnp = $_.Name + " " + $_.ProviderName
$vitnsnp >> $FileName
" " >> $FileName

The last script we add is a list of users and groups who are members of the local admin Group.
I added this one because I want to see all members too and a separate entry for the local user.
"11. members of local administrators group" >> $FileName
net localgroup administrators | where {$_ -AND $_ -notmatch "command completed successfully"} | select -skip 4 >> $FileName
$Delete = Get-Content $Filename
$del = "Der Befehl wurde erfolgreich ausgefhrt."
$Delete = $Delete | Where {$_ -ne $del}
$Delete | Out-File $FileName -Force

To Open the file, we just add the invoke-item command to the script:
Invoke-Item $FileName
Youre done.
The Result of this is good for our support.
Maybe you can use some of these scripts for yours 🙂

01. Hostname: NB0815
02. IP-Address:
03. Local Adminrights: yes
04. Vendor: Dell Inc.
05. Model: Latitude E7440
06. Service tag: xxxx
07. Express Service Code: 123456789
08. Bios Version: A10
09. connected network printers
Name: PRN1234
Printserver: \\SRV0001
Link: \\SRV0001\PRN1234
Name: PRN456
Printserver: \\SRV0001
Link: \\SRV0001\PRN456
10. connected networkshares
H: \\Domain.local\dfs$\Data
U: \\Domain.local\dfs$\home\username
11. members of local administrators group
domain.local\Domain Admins

I think I will add some more options for this in the future.
Have fun with it…

Windows – Powershell Command to remove/add Printers

To remove / add printers and their drivers in Microsoft Windows 8 / Windows Server 2012 via Powershell you can find here some examples of Powershell commands:
Remove Network printers:
(New-Object -ComObject WScript.Network).RemovePrinterConnection("\\Server\Printer")
Add Network printers:
(New-Object -ComObject WScript.Network).AddWindowsPrinterConnection("Server\Printer")
remove specific driver
Remove-PrinterDriver –Name "Microsoft XPS Document Writer v4"
This will remove exact the Microsoft XPS Document Writer v4 Driver.
If you want to remove all Drivers from Canon for example use this command:
Remove-PrinterDriver –Name "Canon"

Windows – Powershell Commands

   Get-Acl                    Get permission settings for a file or registry key
   Set-Acl                    Set permissions
   Get-Alias            gal   Return alias names for Cmdlets
   Import-Alias        ipal   Import an alias list from a file
   New-Alias            nal   Create a new alias.
   Set-Alias            sal   Create or change an alias
   Get-AuthenticodeSignature  Get the signature object associated with a file
   Set-AuthenticodeSignature  Place a signature in a .ps1 script or other file
   Set-Location  cd/chdir/sl  Set the current working location
   Get-ChildItem   dir/ls/gci Get child items (contents of a folder or registry key)
   Get-Command          gcm   Retrieve basic information about a command
   Measure-Command            Measure running time
   Trace-Command              Trace an expression or command
   Add-Content           ac   Add to the content of the item
   Get-Content   cat/type/gc  Get content from item (specific location)
   Set-Content           sc   Set content in the item (specific location)
   Clear-Content        clc   Remove content from a file/item
   ConvertTo-Html             Convert the input into an HTML table
   ConvertFrom-SecureString   Convert a secure string into an encrypted standard string
   ConvertTo-SecureString     Convert an encrypted standard string into a secure string
   Clear-Host      clear/cls  Clear the screen
   Clear-Item           cli   Remove content from a variable or an alias
   Copy-Item     copy/cp/cpi  Copy an item from a namespace location
   Get-Credential             Get a security credential (username/password)
   Get-Culture                Get region information (language and keyboard layout)
   Get-ChildItem   dir/ls/gci Get child items (contents of a folder or registry key)
   Get-Date                   Get current date and time
   Set-Date                   Set system time on the host system
   Get-PSDrive          gdr   Get drive information (DriveInfo)
   New-PSDrive      mount/ndr Install a new drive on the machine
   Remove-PSDrive       rdr   Remove a provider/drive from its location
   Get-Eventlog               Get eventlog data
   Get-ExecutionPolicy        Get the execution policy for the shell
   Set-ExecutionPolicy        Change the execution policy (user preference)
   Export-Alias         epal  Export an alias list to a file
   Export-Clixml              Produce a clixml representation of powershell objects
   Export-Console             Export console configuration to a file
   Export-Csv          epcsv  Export to Comma Separated Values (spreadsheet)
   Invoke-Expression          Run a PowerShell expression
   Exit                       Exit Powershell
   ForEach-Object    foreach  Loop for each object in the pipeline
   ForEach                    Loop through values in the pipeline
   Format-Custom         fc   Format output using a customized view
   Format-List           fl   Format output as a list of properties, each on a new line
   Format-Table          ft   Format output as a table
   Format-Wide           fw   Format output as a table listing one property only
   Get-Item              gi   Get a file/registry object (or any other namespace object)
   Get-ChildItem   dir/ls/gci Get child items (contents of a folder or registry key)
   Get-Help            help   Open the help file
   Add-History                Add entries to the session history
   Get-History  history/h/ghy Get a listing of the session history
   Invoke-History     r/ihy   Invoke a previously executed Cmdlet
   Get-Host                   Get host information
   Clear-Host      clear/cls  Clear the screen
   Read-Host                  Read a line of input from the host console
   Write-Host                 Display objects through the host user interface
   if                         Conditionally perform a command
   Import-Clixml              Import a clixml file and rebuild the PS object
   Import-Csv         ipcsv   Take values from a CSV list and send objects down the pipeline.
   Get-Item              gi   Get a file object or get a registry (or other namespace) object
   Invoke-Item           ii   Invoke an executable or open a file (START)
   New-Item              ni   Create a new item in a namespace
   Remove-Item  rm/del/erase/rd/ri/rmdir   Remove an item
   Set-Item              si   Change the value of an item
   Clear-ItemProperty         Delete the value of a property
   Copy-ItemProperty          Copy a property along with its value
   Get-ItemProperty           Retrieve the properties of an object
   Move-ItemProperty          Move a property from one location to another
   New-ItemProperty           Set a new property of an item at a location
   Remove-ItemProperty        Delete the property and its value from an item
   Rename-ItemProperty        Rename a property of an item
   Set-ItemProperty           Set the value of a property
   Stop-Process    kill/spps  Stop a running process
   Get-Location    pwd / gl   Get and display the current location
   Pop-Location        popd   Set the current working location from the stack
   Push-Location      pushd   Push a location to the stack
   Set-Location  cd/chdir/sl  Set the current working location
   Add-Member                 Add a member to an instance of a PowerShell object
   Get-Member            gm   Enumerate the properties of an object
   Move-Item      move/mv/mi  Move an item from one location to another
   Compare-Object             Compare the properties of objects
   Group-Object       group   Group the objects that contain the same value for a common property
   Measure-Object             Measure the properties of an object
   New-Object                 Create a new .Net object
   Select-Object     select   Select properties of objects.
   Sort-Object         sort   Sort objects by property value
   Where-Object               Filter the objects passed along the command pipeline.
   Out-Default                Send output to default
   Out-File                   Send command output to a file
   Out-Host              oh   Send the pipelined output to the host
   Out-Null                   Send output to null
   Out-Printer           lp   Send the output to a printer
   Out-String                 Send objects to the host as strings
   Powershell                 Launch a powershell session
   Convert-Path        cvpa   Convert a ps path to a provider path
   Join-Path                  Combine a path and child-path
   Resolve-Path        rvpa   Resolves the wildcards in a path
   Split-Path                 Return part of a path
   Test-Path                  Return true if the path exists, otherwise return false
   Get-Pfxcertificate         Get pfx certificate information
   Pop-Location        popd   Set the current working location from the stack
   Push-Location      pushd   Push a location to the stack
   Get-Process       ps/gps   Get a list of processes on a machine
   Stop-Process    kill/spps  Stop a running process
   Clear-ItemProperty   clp   Remove the property value from a property
   Copy-ItemProperty    cpp   Copy a property along with it's value
   Get-ItemProperty      gp   Retrieve the properties of an object
   Move-ItemProperty     mp   Move a property from one location to another
   New-ItemProperty           Set a new property
   Remove-ItemProperty   rp   Remove a property and its value
   Rename-ItemProperty  rnp   Renames a property at its location
   Set-ItemProperty      sp   Set a property at the specified location to a specified value
   Get-PsProvider             Get information for the specified provider
   Set-PSdebug                Turn script debugging on or off
   Add-PsSnapIn               Add snap-ins to the console
   Get-PsSnapin               List PowerShell snap-ins on this computer
   Remove-PSSnapin            Remove PowerShell snap-ins from the console
   Read-Host                  Read a line of input from the host console
   Remove-Item  rm/del/erase/rd/ri/rmdir   Remove an item
   Rename-Item      ren/rni   Change the name of an existing item
   Rename-ItemProperty        Rename a property of an item
   Get-Service          gsv   Get a list of services
   New-Service                Create a new service
   Restart-Service            Stop and then restart a service
   Resume-Service             Resume a suspended service
   Set-Service                Change the start mode/properties of a service
   Sort-Object         sort   Sort objects by property value
   Start-Service       sasv   Start a stopped service
   Stop-Service        spsv   Stop a running service
   Suspend-Service            Suspend a running service
   Start-Sleep        sleep   Suspend shell, script, or runspace activity
   Select-String              Search through strings or files for patterns
   Tee-Object                 Send input objects to two places
   New-Timespan               Create a timespan object
   Trace-Command              Trace an expression or command
   Get-Tracesource            Get components that are instrumented for tracing.
   Set-Tracesource            Trace a PowerShell component
   Start-Transcript           Start a transcript of a command shell session
   Stop-Transcript            Stop the transcription process
   Get-Uiculture              Get the ui culture information
   Get-Unique            gu   Get the unique items in a collection
   Update-Formatdata          Update and append format data files
   Update-Typedata            Update the current extended type configuration
   Clear-Variable       clv   Remove the value from a variable
   Get-Variable          gv   Get a powershell variable
   New-Variable          nv   Create a new variable
   Remove-Variable       rv   Remove a variable and its value
   Set-Variable      set/sv   Set a variable and a value
   Where-Object       where   Filter input from the pipeline
   While (condition) {action} else {action}
   Get-WMIobject              Get WMI class information
   Write-Debug                Write a debug message to the host display
   Write-Error                Write an object to the error pipeline.
   Write-Output        echo   Write an object to the pipeline
   Write-Progress             Display a progress bar
   Write-Verbose              Write a string to the host's verbose display
   Write-Warning              Write a warning message
   #                          Comment / Remark