Search This Blog

Monday, March 21, 2016

Domino Port Audit

Pretend some server admins were going to change out their IPs from their 208 addresses for some new IPs and you needed to test for connectivity for all the IPs involved; server and services. You may want to do something similar to the following...

## The Scripting Guys Test-Port script
## https://gallery.technet.microsoft.com/scriptcenter/97119ed6-6fb2-446d-98d8-32d823867131

## Pretend I got IBM Domino servers in cluster pairs like this...
 app001/srv/mycompany 10.10.10.23
 app011/srv/mycompany 10.10.10.24
 app021/srv/mycompany 208.109.4.218   # godaddy.com is not my server.
 app022/srv/mycompany 208.109.4.219   # I don't know who this is.
 app002/srv/mycompany 10.10.2.54
 app012/srv/mycompany 10.10.2.55

## From a cmd I can issue these commands and capture the results
ping 10.10.10.23
ping 10.10.10.24
ping 208.109.4.218
ping 208.109.4.219
ping 10.10.2.54
ping 10.10.2.55

tracert 10.10.10.23
tracert 10.10.10.24
tracert 208.109.4.218
tracert 208.109.4.219
tracert 10.10.2.54
tracert 10.10.2.55

## I Want to see the successful connection to the NRPC port
start telnet 10.10.10.23 1352
start telnet 10.10.10.24 1352
start telnet 208.109.4.218 1352
start telnet 208.109.4.219 1352
start telnet 10.10.2.54 1352
start telnet 10.10.2.55 1352

## Domino console batch saved as trace.txt and piped in to the console
trace 10.10.10.23
trace 10.10.10.24
trace 208.109.4.218
trace 208.109.4.219
trace 10.10.2.54
trace 10.10.2.55
## When your done with this you can search the log for messages like...
## Network: 10.10.10.23 is the server address of server CN=app001/OU=srv/O=mycompany
## I typically just search on " is the server address of server CN=" 
## Make sure to include the double quotes.

## Singular test 
$tcpObject = New-Object System.Net.Sockets.TcpClient
$tcpConnect = $tcpObject.BeginConnect('10.10.10.23','1352',$null,$null)
$tcpConnect.AsyncWaitHandle.WaitOne(1000)
$tcpObject.Close()

## playing around
$Server = '10.10.10.23'
$Server = '10.10.10.24'
$Server = '208.109.4.218'
$Server = '208.109.4.219'
$Server = '10.10.2.54'
$Server = '10.10.2.55'

## Lets to a batch
$ServerList = @('10.10.10.23',
                '10.10.10.24',
                '208.109.4.218',
                '208.109.4.219',
                '10.10.2.54',
                '10.10.2.55')
$port=1352
foreach($Server in $ServerList){
   $tcpObject = New-Object System.Net.Sockets.TcpClient
   $tcpConnect = $tcpObject.BeginConnect($Server,$port,$null,$null)
   $wait = $tcpConnect.AsyncWaitHandle.WaitOne(1000)
   ($server+" "+$wait)
   $wait=$null
   $tcpObject.Close()
}
This batch audit at the end creates a result similar to ...
10.10.10.23 True
10.10.10.24 True
208.109.4.218 False
208.109.4.219 False
10.10.2.54 True
10.10.2.55 True

Tuesday, March 8, 2016

Getting Started with Powershell and Office365 scripting

Here's what I know today...
# Managing Office 365 and Exchange Online with Windows PowerShell
# https://support.office.com/en-us/article/Managing-Office-365-and-Exchange-Online-with-Windows-PowerShell-06a743bb-ceb6-49a9-a61d-db4ffdf54fa6

#Connect to Office 365 PowerShell
$UserCredential = Get-Credential
$MsolService = Connect-MsolService -Credential $UserCredential
    # do stuff here like... 
    Get-Module
    Get-Command -Module MSOnline
# no remove: https://technet.microsoft.com/en-us/library/dn568015.aspx#Step8

# Connect to Exchange Online using remote PowerShell
Set-ExecutionPolicy RemoteSigned
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session
    # do stuff here like... 
    Get-Module
    Get-Command -Module tmp_mjopwmqk.4nu #or whatever it is named

Remove-PSSession $Session

# Connect to Office 365 Compliance Center PowerShell - need a role first
Set-ExecutionPolicy RemoteSigned
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.compliance.protection.outlook.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession $Session
    # do stuff here?
Remove-PSSession $Session #Security limits 3 connections only - Clean up!

# Connecting to Skype for Business Online by using Windows PowerShell 
$UserCredential = Get-Credential
$Session = New-CsOnlineSession -Credential $UserCredential
    # do stuff here
Remove-CsOnlineSession $Session

# Set up the SharePoint Online Management Shell Windows PowerShell environment 
$UserCredential = Get-Credential
$URL ='https://MyCompany-my.sharepoint.com'
Connect-SPOService -Url $URL -credential $UserCredential
    # do stuff here
Disconnect-SPOService

I wonder what I'll know tomorrow...

Thursday, November 19, 2015

Sharepoint Redirect to Notes://

I couldn't get my Sharepoint admin to add support to another link type so I created an html file to store in my Sharepoint's Site Assets as a redirector. Then I could embed the shortcut to the html redirector in any Sharepoint content.

HowToStartNotes.html ==========================================
<!DOCTYPE html> <!-- app001/srv/mycompany 10.10.10.23 app002/srv/mycompany 10.10.02.54 app003/srv/mycompany 10.10.132.132 app004/srv/mycompany 10.10.214.03 Not everyone has access via the Domino server's name in their region's DNS. So, replacing the link's server name with the server IP makes it globally accessible. --> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>How To Link</title> <meta http-equiv="refresh" content="0;URL='Notes://10.10.132.132/1234567890123456/12345678901234567890123456789012/12345678901234567890123456789012'" /> </head> <body> <p>This page is an automatic link to to the <a href="Notes://10.10.132.132/1234567890123456/12345678901234567890123456789012/12345678901234567890123456789012"> How to start Notes</a> article in the <a href="Notes://10.10.132.132/1234567890123456"> Notes How To database</a>. <br> <br> Contact the Helpdesk if it is not working as needed. </p> </body> </html>

Wednesday, July 22, 2015

Domino Mail Stats with Powershell

I was helping a project team implement ZL Tech's (zlti.com) archiving with folks from Honda (Honda.com) and ViewPointe (Viewpointe.com) and found myself getting metrics every couple of hours. Which got really annoying pretty fast... And, so the following bit of code helped me to let other folks do the same as needed.
Have Fun! : )

The Output...

PS D:\data\scripts\ps-notes> ./MailStats.ps1
Start: 13:09:57.0831

Host            Drive    Size GB    Free GB
=============== ===== ========== ==========
AMnotes01          F:     150.00      28.19

   Mailbox            Size MB  Doc Count
   =============== ========== ==========
   mail1.box           12,336          6
   mail2.box            4,884          4
   mail3.box            4,727          4
   mail4.box            4,651          4
   --------------- ---------- ----------
   Totals              26,598          4

Elapsed Time: 00:00:17.0125

The Code...
## MailStats.ps1
## First Code 07:05:20.0415
## initial runtime 00:00:48.0165
## 
$dtStart = (get-date)
"Start: "+($dtStart.Hour.ToString()).PadLeft(2,"0")+":"+($dtStart.Minute.ToString()).PadLeft(2,"0")+":"+($dtStart.Second.ToString()).PadLeft(2,"0")+"."+($dtStart.Millisecond.ToString()).PadLeft(4,"0")
$StartPath = Get-Location

## Vars to set
$LocalDataDir = 'C:\Program Files (x86)\IBM\Lotus\Notes\Data' ## your local Notes data dir
$DominoServiceName = 'UserSMTPgw01/SRV/AM/MyCompany' ## your Notes/Domino Server
$HostName = 'AMnotes29' ## the host name that the Domino service runs on
$HostDataDir = 'f$\notes\data\' ## the rest of the unc path to the Domino services' data dir 
$HostDataDrive = 'F:' ## drive where the Domino services' data dir is on 

$UNCMailboxPath = '\\'+$HostName+'\'+$HostDataDir+'mail*.box'
$MailBoxes = Get-ChildItem -Path $UNCMailboxPath

Set-Location $LocalDataDir
$Notes = New-Object -ComObject Lotus.NotesSession
$Notes.Initialize()

$HostMBDisk = Get-WmiObject Win32_LogicalDisk -ComputerName $HostName | where {$_.DeviceID -eq 'F:'} | Select-Object Size,FreeSpace

Write-output ""
Write-Output "Host            Drive    Size GB    Free GB"
Write-Output "=============== ===== ========== =========="
Write-Output  ( $HostName.PadRight(15)+' '   `
               +$HostDataDrive.PadLeft(5)+' '    `
               +("{0:N2}" -f ($HostMBDisk.Size/1GB)).ToString().PadLeft(10)+' '   `
               +("{0:N2}" -f ($HostMBDisk.FreeSpace/1GB)).ToString().PadLeft(10))
Write-output ""
Write-Output "   Mailbox            Size MB  Doc Count"
Write-Output "   =============== ========== =========="

$TotSize = 0
$TotDocs = 0

foreach ($mailbox in $MailBoxes) {
   
   $dbMB = $Notes.GetDatabase($DominoServiceName, $mailbox.name.ToString(), 1)

   if ($dbMB -ne $null) {

      $colAllDocs = $dbMB.AllDocuments

      Write-output  ( "   "   `
                      +$mailbox.name.ToString().PadRight(15)+' '   `
                      +("{0:N0}" -f ($dbMB.Size/1MB)).ToString().padleft(10)+' '   `
                      +($colAllDocs.Count.ToString().padleft(10)))
      $TotSize = $TotSize + $dbMB.Size
      $TotDocs = $colAllDocs.Count

      $colAllDocs = $null

   } else {
         
      $strStatus = 'No Mailbox'

   }
      
   $dbMb = $null

}
Write-Output "   --------------- ---------- ----------"
Write-output  ( '   Totals          '   `
               +("{0:N0}" -f ($TotSize/1MB)).ToString().padleft(10)+' '   `
               +($TotDocs.ToString().padleft(10)))

Write-output ""

Set-Location $StartPath
$dtDiff = (New-Timespan -Start $dtStart -End (Get-Date))
"Elapsed Time: "+($dtDiff.Hours.ToString()).PadLeft(2,"0")+":"+($dtDiff.Minutes.ToString()).PadLeft(2,"0")+":"+($dtDiff.Seconds.ToString()).PadLeft(2,"0")+"."+($dtDiff.Milliseconds.ToString()).PadLeft(4,"0")
$TotSize = $null
$TotDocs = $null
$dbMB = $null
$Notes = $null
$StartPath = $null
$dtStart = $null

Sunday, June 7, 2015

Getting a Web Page with PowerShell

This is a patern to get a webpage. I sometimes work in a network accessing the internet through a proxy, So there is included a block where proxy creds are used.

GetWebPage.ps1
#http://learn-powershell.net/2011/02/11/using-powershell-to-query-web-site-information/
#http://stackoverflow.com/questions/571429/powershell-web-requests-and-proxies

Begin {
    $user = $env:username
    $url = "https://hereisasite.net"
    #$url = "http://google.com"
    $pwd = Read-Host "Password?" -assecurestring
    $account = new-object System.Net.NetworkCredential($user,[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pwd)), "")

    #$proxyAddr = (get-itemproperty 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings').ProxyServer
    #$proxy = new-object System.Net.WebProxy
    #$proxy.Address = $proxyAddr
    #$proxy.credentials = $account
    #$proxy.useDefaultCredentials = $true

    $web = New-Object System.Net.WebClient
    $web.Credentials = $account
    #$web.proxy = $proxy

    $flag = $false
}
Process {
    While ($flag -eq $false) {
        Try {
            $webpage = $web.DownloadData($url)
            $str = [System.Text.Encoding]::ASCII.GetString($webpage)
            $flag = $true
        } Catch {
             Write-host -fore Red -nonewline "Access down... "
             $str = "Nothing to see here... "
             $flag = $true
        }
    }
}
End{
    Write-Host $str
}

Thursday, March 5, 2015

Three.js - My First Three.js on canvas

My first Three.js app on canvas Just blow this test is there a spinning box?...

Is there a spinning box above this?
Found it! it's at the way at the bottom of the page. (I'll fix it soon)

Wednesday, February 25, 2015

Cool Maps

At least, I think they are cool...

Comment if you want anything added.

Live global air traffic   http://flightradar24.com/
Cyberthreat Real-Time Map   http://cybermap.kaspersky.com/
   I love the presentation. This is nice fish tank.
Live Attacks     http://map.ipviking.com/
   This one reminds me of the film War Games. "Would you like to play a game?"
Top daily DDoS attacks workdwide   http://www.digitalattackmap.com/
   Informative and clean.