What is this?

This knowledgebase contains questions and answers about PRTG Network Monitor and network monitoring in general.

Learn more

PRTG Network Monitor

Intuitive to Use. Easy to manage.
More than 500,000 users rely on Paessler PRTG every day. Find out how you can reduce cost, increase QoS and ease planning, as well.

Free Download

Top Tags


View all Tags

Custom Sensor mit powershell und Exchange 2010

Votes:

0

Ich habe ein Script erstellt, welches die anzahl bestimmter Kontakte ausliest.

----------------------------------------------------------
$myKontakte = Get-AddressList "Kontakte XYZ" $varAnzahl=(Get-Recipient -RecipientPreviewFilter $myKontakte.RecipientFilter -ResultSize unlimited).count write-host $varAnzahl,":OK"
---------------------------------------------------------
Das gibt in der 64bit Umgebung die richtigen Werte. Als Sensor gestartet nicht. Vermutlich weil PRTG die 32bit Powershell Umgebung startet. Wie kann ich es erreichen das dies Script läuft. Gibt es eine Road Map für eine 64 bit PRTG Application? Gruß Stephan Kryst

custom-script-exe custom-sensor exchange-2010 powershell

Created on Jul 3, 2013 4:18:18 AM

Last change on Mar 19, 2015 3:46:51 PM by  Martina Wittmann [Paessler Support]



2 Replies

Accepted Answer

Votes:

0

Hallo,

Anhand des von Ihnen zur verfügung gestellten Scripts sehe ich nicht, warum das Script nicht in der 32bit-Powershell laufen soll. Evtl. wurde auf der 32bit-Powershell vergessen, 'set-Execution Policy' auszuführen (powershell-script-works-from-powershell-prompt-but-not-from-prtg)?

Ansonsten habe ich vor kurzem ein Script geschrieben welches demnächst per Default mit PRTG ausgeliefert werden wird und den Start von 64bit-Powershell-scripten ermöglicht.
Als Übergang können Sie das Script auch manuell erstellen:

Hierfür bitte in dem Verzeichnis, welches das Sensor-script enthält ein weiteres .ps1-script anlegen mit folgendem Inhalt (Bei auslieferung mit PRTG wird das script den Namen 'Demo Powershell Script - Run Custom Powershell Sensor in 64bit Powershell.ps1' erhalten):

# this script is based on information from support.microsoft.com at http://msdn.microsoft.com/en-us/library/aa384187(v=vs.85).aspx
# "Windows2003 64-bit"-users need to install a hotfix from Microsoft, pleaes refer to http://support.microsoft.com/kb/942589 for futher information!

# Use the parameter-section of the sensor to provide the script to be executed as well as additional arguments
# examples: 
# 'Demo Powershell Script - Return architecture used for Powershell.ps1'
# 'Demo Powershell Script - Return architecture used for Powershell.ps1' Demovalue
# 'Demo Powershell Script - Return architecture used for Powershell.ps1' -demo1 "This is a Demo Argument" -demo2 This is a bad example


$Invocation = $Script:MyInvocation
[string]   $path = split-path $Invocation.MyCommand.path -parent
[string]   $scriptname = $Invocation.UnboundArguments[0].split("\")[-1]
[string]   $scriptarguments = ""
foreach ($arg in $Invocation.UnboundArguments[1..($Invocation.UnboundArguments.count)]) {
    if ($arg.tostring().StartsWith("-")) { 
        $scriptarguments += "$arg "
    } else { 
        $scriptarguments += """$arg"" "
    }
}
[string]   $windir = (get-childitem -path env:windir).value
[string]   $psdir = "sysnative\windowspowershell"
[boolean]  $direxists = (Test-Path "$($windir)\$($psdir)")
[string]   $64bitPS = Join-Path -path (Join-Path -path $windir -childpath $psdir) -childpath "v1.0\powershell.exe"

[boolean]  $is32bit = [System.IntPtr]::Size -eq 4

if ( $is32bit -and $direxists ) {
    cmd.exe /C "$64bitPS -file ""$($path)\$($scriptname)"" $scriptarguments"
    exit $lastexitcode
} elseif ( $is32bit -and -not $direxists ) {
    "0:ERROR there is no 64-bit version of PowerShell available"
    exit 2
} else {
    "0:ERROR you are running the script from a 64-bit PowerShell"
    exit 2
}

Danach können Sie einen neuen 'Custom Exe'-Sensor anlegen, im DropDown-Menü dieses neue Script auswählen und bei den Sensor-Parametern den Namen des eigentlichen Scriptes sowie die nötigen Argumente übergeben.

Zum Überprüfen können sie folgendes 'Test'-script, welches die verwendete Architektur (32 oder 64 bit), sowie die ausgewerteten Argumente test1 und test2 zurückgibt, verwenden: z. B. das script unter "<PRTG-System-Ordner>\Custom Sensors\EXE\Demo Powershell Script - Return architecture used for Powershell.ps1" anlegen, folgenden Inhalt hinein kopieren

Param([string]$demo1,[string]$demo2)

# resize the window to be able to return larger strings than the default 80 characters without linebreak:
$pshost = get-host
$pswindow = $pshost.ui.rawui
$newsize = $pswindow.buffersize
$newsize.width = 150
$pswindow.buffersize = $newsize
$newsize = $pswindow.windowsize
# in PowerShell ISE size is not settable
if ( $newsize -ne $null ){
    $newsize.width = 150
    $pswindow.windowsize = $newsize
}

$params = ""
if ( $demo1.length -gt 0 ) { $params += ", Named Parameter demo1 '$($demo1)'" }
if ( $demo2.length -gt 0 ) { $params += ", Named Parameter demo2 '$($demo2)'" }
if ( $args.length -gt 0 ) { $params += ", unnamed Parameters '$($args)'" }

if ([System.IntPtr]::Size -eq 4) { 
    "32:32-bit$($params)" 
} else { 
    "64:64-bit$($params)" 
}

und als Parameter des neuen 'Custom Exe' (nicht Advanced!) Sensors (der auf das vorhergehende Wrapper-Script verweisen muss) die im eigentlichen Script hinterlegten Beispielparameter einsetzen.

Mit freundlichen Grüßen

Created on Jul 3, 2013 1:32:47 PM by  Dieter Loskarn [Paessler Support]



Votes:

0

Hi Stephan,

There is also a Custom Sensor available at PRTGToolsFamily.com named PSx64 that executes a Powershell script in 64 bit mode and returns both the script result and exit code to PRTG.

Created on Jul 3, 2013 5:18:35 PM




Disclaimer: The information in the Paessler Knowledge Base comes without warranty of any kind. Use at your own risk. Before applying any instructions please exercise proper system administrator housekeeping. You must make sure that a proper backup of all your data is available.