Monday, March 2, 2015

Powershell: SkipAsSource Flag

Finally ran into an issue where the removal of the primary ip address after Server 2003 caused an issue. Since if you have a multihomed nic the routing table will be set to use the closest IP address to the gateway as the source interface. Here is a fix from  James Kehr to run on your server to set an ip address to be the "Primary" ie Source. I did edit his script by putting a menu and removing the need to put a interface alias. This should only work with 2012 and above with powershell 3.0 and above. For other OS check the heyscriptingguy link.

http://blogs.technet.com/b/heyscriptingguy/archive/2013/01/24/use-powershell-to-change-ip-behavior-with-skipassource.aspx
KB969029

Thank you James Kehr
# set some constants
clear
Import-Module NetTCPIP

Get-NetIPAddress | Where {$_.PrefixOrigin -eq "Manual"} | select IPaddress,InterfaceAlias,SkipasSource | format-table

$primaryIP = Read-Host "Which ip address should be set as primary?"
$Alias = Get-NetIPAddress $primaryIP -EA stop | select -expand InterfaceAlias

Write-Host "Setting $Alias primary IP to $primaryIP"

# get all the IP addresses on the interface, filtered by IPv4 and excluding

# the $primaryIP

[array]$IPs = Get-NetIPAddress -InterfaceAlias $Alias | Where-Object {$_.AddressFamily -eq "IPv4" -and $_.IPAddress -ne $primaryIP}

 

# set primary IP SkipAsSource to false

Set-NetIPAddress -IPAddress $primaryIP -InterfaceAlias $Alias -SkipAsSource $false

 

# set other IP addresses with SkipAsSource equal to true

Set-NetIPAddress -IPAddress $IPs.IPAddress -InterfaceAlias $Alias -SkipAsSource $true
Write-Host "Please review the output False under SkipasSource means the ip can be a source"
Get-NetIPAddress | Where {$_.PrefixOrigin -eq "Manual"} | select IPaddress,InterfaceAlias,SkipasSource | format-table

Sunday, January 25, 2015

Bring back the windows 10 start menu.


Just follow the steps below:
  1. ​Right click on the Start Button and select "Run"
  2. Type "regedit"
  3. Navigate to HKEY_CURRENT_USER>Software>Microsoft>Windows>CurrentVersion>Explorer>Advance
  4. Create a new DWORD (32-bit) value, call it "EnableXamlStartMenu"
  5. Restart Explorer​
Found from 
http://www.winbeta.org/news/how-bring-back-old-resizable-start-menu-running-windows-10-build-9926

Friday, November 21, 2014

SQL - If you don't have permission to logon fix

Purpose: If you don't want to put a SQL db into single user mode, you can try the following to give yourself permission to a SQL instance. The following will open a command prompt as the built in security principal "System" using PSExec. psexec -i -s -d cmd From there open SQL management studio from within that command prompt. ie: c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe" I came up with this independently, but a simple google search will show you others have figured it out as well. Should be able to now give yourself permissions to log on now depending on how the SQL was initially configured. If this doesn't work you will have to Start the instance of SQL Server in single-user mode by using either the -m or -f options. Any member of the computer's local Administrators group can then connect to the instance of SQL Server as a member of the sysadmin fixed server role.

http://msdn.microsoft.com/en-us/library/dd207004.aspx

Monday, October 13, 2014

Powershell: Find all shares on domain using Jobs


Purpose: This script will search AD for all servers and report any shares(includes printers)

This script will do 50 servers at a time
Requires RSAT tools powershell
cls

#Find Shares on all Domain computers 50 at a time
#www.tonyunger.com  
  
cls   
import-module activedirectory
  
#$Global:Servers = Get-Content "C:\temp\computers.txt"  
$Global:Servers = Get-ADComputer -Filter {(OperatingSystem -Like "Windows Server*")-and (enabled -eq "true")} -Property SamAccountName | Select -expand Name  
$Global:ReportPath = "C:\temp\Shares.txt"  
  
$scriptblock = {  
       param($server)  
    $pingResult = Test-Connection -count 1 -ErrorAction SilentlyContinue $server | select IPV4Address 
       $Shares = Get-WmiObject Win32_Share -ComputerName $Server | select name 
       $values = @()  
       if($Error){  
            if( $Error -like "*Access is denied*"){  
                return ($server+",AccessDenied")  
            }  
            $Error.Clear()  
            return ($server+",")  
       }  
     
     foreach ($Share in $shares) {            
  
         $values += ($Server + "," + $Share) 
             }  
       return $values  
}  
  
function getdata{  
    $jobs = Get-Job | ? { $_.State -eq "Completed" }  
     foreach( $job in $jobs){  
        $results = Receive-Job $job  
       Add-Content $ReportPath $results  
        Remove-Job $job  
     }     
}  
  
  
Add-Content $ReportPath "Server,share"  
foreach($server in $Servers){  
          
     while( (Get-Job).count -ge 50 ){ 
            sleep -Seconds 1  
            getdata  
     } 
  
     Start-Job -ScriptBlock $scriptblock -ArgumentList $server 
}  
  
while( (get-job).count -ne 0 ){  
      sleep -Seconds 1
            getdata  
              
 }  
   
 

Friday, September 12, 2014

Powershell: get free disk space from computers listed in text file. using Job


Purpose: This script will search a list of computers and report their c drives total and free space into a text file that can be imported into excel.

This is my first time using jobs to speed up the process of gathering the info so there could be a better way of doing this but this seems to work just fine.

cls
#Get free disk space code from here.
#http://www.codeproject.com/Articles/757946/Retrieve-Disk-Space-of-Remote-Computers-using-Powe




$Global:Servers = Get-Content "C:\temp\computers.txt"
$Global:ReportPath = "C:\temp\freediskspace.txt"

$scriptblock = {
       param($server)
    $ConvertToGB = (1024 * 1024 * 1024)
       $pingResult = Test-Connection -count 1 -ErrorAction SilentlyContinue $server | select IPV4Address
       $disk = Get-WmiObject Win32_LogicalDisk -ComputerName $Server -Filter "DeviceID='C:'" | Select-Object Size,FreeSpace
       $values = @()
       if($Error){
            if( $Error -like "*Access is denied*"){
                return ($server+",,AccessDenied")
            }
            $Error.Clear()
            return ($server+",,")
       }
        
                
       $values += ($Server + "," + ($disk.Size / $ConvertToGB) + "," + ($disk.FreeSpace / $ConvertToGB) )
             
       return $values
}

function getdata{
    $jobs = Get-Job | ? { $_.State -eq "Completed" }
     foreach( $job in $jobs){
        $results = Receive-Job $job
       Add-Content $ReportPath $results
        Remove-Job $job
     }   
}


Add-Content $ReportPath "Server,Total,Free"
foreach($server in $Servers){
        
     while( (Get-Job).count -ge 50 ){
            sleep -Seconds 1
            getdata
     }

     Start-Job -ScriptBlock $scriptblock -ArgumentList $server
}

while( (get-job).count -ne 0 ){
      sleep -Seconds 1
            getdata
            
 }
 

Netapp Busy Lun


Purpose - Find busy lun on a netapp filer running in 7mode
                      
snap list Volume1
Volume Volume1
working...

  %/used       %/total  date          name
----------  ----------  ------------  --------
  0% ( 0%)    0% ( 0%)  Sep 11 16:31  netapp(0135052001)_mirror_computer.336 (snapmirror)
 16% (16%)   14% (14%)  Sep 09 07:42  sqlsnap__computer_09-09-2012_07.30.29__weekly (busy,LUNs)


lun snap usage -s computer sqlsnap__computer_09-09-2012_07.30.29__weekly


You need to delete the following LUNs before deleting the snapshot
        /vol/computer/{dc5a1359-317d-47cd-a408-3dd99ec4059c}.rws

You need to delete the following snapshots before deleting the snapshot
        Snapshot - netapp(0135052001)_mirror_computer.336

PowerShell: One liner get distinguishedname for all user accounts in text file

One liner to get users from a text file and create a report of distinguishedname. You need the activedirectory module imported to run.

import-module activedirectory

gc "C:\temp\serviceaccounts.txt" | Foreach-Object {Get-ADUser -filter {CN -like $_} -Properties *} | select Name, SAMAccountName, distinguishedname | export-csv -path c:\temp\test.csv

Powershell: Microsoft Graph to add new roles to application registration

PowerShell Script Bulk add new roles to application registration in azure. Update $roles with ,Us...