Skip to content

Instantly share code, notes, and snippets.

View dstreefkerk's full-sized avatar

Daniel dstreefkerk

  • Sydney, Australia
View GitHub Profile
#requires -version 3
<#
.SYNOPSIS
Get-ProliantTemperatures - Get HP ProLiant temperature sensor readings and status for PRTG
.DESCRIPTION
Reads the status of HP ProLiant temperatures sensors via WMI and HP WBEM
and
http://www.hp.com/go/HPwbem
@dstreefkerk
dstreefkerk / Migrate-OfficescanClient.ps1
Created May 2, 2014 08:27
Computer startup or PS Remoting script to migrate an installed Officescan client to another server if it's currently pointed at a different one.
<#
.SYNOPSIS
Migrate-OfficescanClient - Migrate Officescan clients to the correct server
.DESCRIPTION
Checks which server the Officescan client is pointing to (by reading ofcscan.ini)
If it's pointing to the wrong one, call the appropriate ipxfer command with
the correct parameters to point it to the new/correct server
@dstreefkerk
dstreefkerk / Update-GeckoboardDashboard.ps1
Created December 5, 2014 05:38
Spiceworks Geckoboard Wrapper Script
Import-Module sqlite
$scriptLocation = "C:\Scripts\Spiceworks-Geckoboard\"
$spiceworksDatabaseFilePath = "C:\Program Files (x86)\Spiceworks\db\spiceworks_prod.db" # Path to the SQLite database used by SpiceWorks
# Get all of the widget scripts
$allScripts = Get-ChildItem $scriptLocation -Filter "*.ps1"
# Mount the SpiceWorks database
mount-sqlite -name SpiceWorks -dataSource $spiceworksDatabaseFilePath
@dstreefkerk
dstreefkerk / Spiceworks_Geckoboard-TicketsOpen.ps1
Created December 5, 2014 05:46
Tickets Open widget update code. To be used with a "Number and Secondary Stat" widget: https://developer.geckoboard.com/#number-and-secondary-stat
$apikey = "paste in your API key here"
$geckoPushUrl = "paste in your push URL here"
# Get the count of open tickets from the database
$openTickets = Invoke-Item spiceworks: -sql 'select count() as "count" from tickets where status == "open"'
#Construct a here-string with the required json format
$jsonstream = @"
{
"api_key":"APIKEY",
@dstreefkerk
dstreefkerk / Spiceworks_Geckoboard-TicketList.ps1
Created December 5, 2014 05:54
Ticket List Widget update code, to be used with a List Widget: https://developer.geckoboard.com/#list
$query = @"
select t.id as id,t.summary as summary,t.description as description,u.first_name || ' ' || u.last_name as name, round((julianday(date('now','localtime')) - julianday(t.created_at))) + 1 as days, t.category as category from tickets as t
inner join users as u on t.created_by = u.id
where status == 'open'
order by t.created_at desc
"@
$apikey = "paste API key here"
$geckoPushUrl = "paste push URL here"
@dstreefkerk
dstreefkerk / Get-ChicagoCrimes.ps1
Created April 23, 2015 04:34
Retrieves data from https://data.cityofchicago.org and shows the last 1 month's crime data
# Get the data, convert it to JSON
$jsonData = Invoke-WebRequest "https://data.cityofchicago.org/resource/ijzp-q8t2.json" | ConvertFrom-Json
# Filter our data set down to only the last month's crimes. Note that the data feed has a built-in lag of 7 days
$lastMonthsData = $jsonData | Where-Object {($_.date | get-date) -gt ((get-date).AddMonths(-1))}
# Show results, allowing user to select categories first and then view individual crimes
$lastMonthsData | Group-Object -Property primary_type | Sort-Object Count -Descending | Select-Object Name,Count,Group | Out-GridView -Title "Select a category (or multiple) to view details" -OutputMode Multiple | Select-Object -ExpandProperty Group | select primary_type,description,location_description,date,latitude,longitude,block,domestic,arrest,case_number | Sort-Object date -Descending | Out-GridView -Title "Crime Details"
@dstreefkerk
dstreefkerk / Spiceworks to FreshDesk - Contacts
Created July 9, 2015 00:38
SQLite query to extract users from Spiceworks' DB for tickets created in the past 2 years and get it into the format required by FreshDesk for contact import via CSV
select distinct u.email as email,
u.first_name || ' ' || u.last_name as name,
u.title as job_title,
u.cell_phone as mobile,
u.office_phone as phone,
u.location as time_zone,
'en' as language
from users as u
inner join tickets as t on u.id = t.created_by
where (u.disabled is null) and ((u.first_name is not null) and (u.last_name is not null))
@dstreefkerk
dstreefkerk / Get-ForwardedAppLockerLogs.ps1
Created June 22, 2017 00:50
Pull AppLocker logs out of the Forwarded Logs folder on a Windows Event Collector, and present them in a GridView
Function Get-AppLockerLogs {
$filter = '
<QueryList>
<Query Id="0" Path="ForwardedEvents">
<Select Path="ForwardedEvents">*[System[Provider[@Name="Microsoft-Windows-AppLocker"] and (Level=2 or Level=3)]]</Select>
</Query>
</QueryList>
'
$data = Get-WinEvent -FilterXml $filter -Oldest
@dstreefkerk
dstreefkerk / Create-X500ProxyAddressFromLegacyExchangeDN.ps1
Created April 17, 2018 06:12
PowerShell function to create an X500 proxy address from a IMCEAEX NDR
Function Create-X500ProxyAddressFromLegacyExchangeDN($Address) {
# As per https://support.microsoft.com/en-au/help/2807779/imceaex-non-delivery-report-when-you-send-email-messages-to-an-interna
$Address = $Address.Replace('_','/') # Replace any underscore character (_) with a slash character (/)
$Address = $Address.Replace('+20',' ') # Replace "+20" with a blank space
$Address = $Address.Replace('+28','(') # Replace "+28" with an opening parenthesis character
$Address = $Address.Replace('+29',')') # Replace "+29" with a closing parenthesis character.
$Address = $Address.Replace('IMCEAEX-','') # Delete the "IMCEAEX-" string
$Address = $Address.Split('@')[0] # Delete the "@mgd.domain.com" string
$Address = "X500:$Address" # Add "X500:" at the beginning
$Address
@dstreefkerk
dstreefkerk / Get-LenovoBiosSetting.ps1
Last active May 23, 2018 00:22
Retrieves all current BIOS settings, and lists possible values for each setting
$currentSettings = Get-WmiObject -Class Lenovo_BiosSetting -Namespace root\wmi -Filter 'CurrentSetting != ""' | Select-Object -ExpandProperty CurrentSetting | Sort-Object
$allSettings = @()
foreach ($setting in $currentSettings) {
# Check if Lenovo_GetBiosSelections exists. If not, we're running on a newer system that includes returns the possible values
# as part of the current setting value
$legacyMethodExists = Get-CimClass Lenovo_GetBiosSelections -Namespace root\wmi -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
if ($legacyMethodExists) {