Row 1 has headings:
- CIDR
- IP
- First IP Int
- Last IP Int
- Test IP Int
- IP In Range
Column A contains CIDRs (e.g. 3.2.1.0/30
)
# Given a URI fetches the certificates hosted on that site, then parses the PEM to extract user friendly info (currently just as strings; I've not added logic to convert the output to PSCustomObjects, though may add that soon if I find the need). | |
$uri = 'example.org' | |
$output = (echo "" | openssl s_client -connect "$($uri):443" -servername $uri -showcerts 2>$null) -join "`n" | |
$output | select-string '(?smi)-----BEGIN CERTIFICATE-----(.*?)-----END CERTIFICATE-----' -AllMatches | %{$_.Matches} | %{$_.Value | openssl x509 -issuer -fingerprint -sha256 -enddate -subject -noout;'---'} | |
<# # Example Output # | |
issuer=C = US, O = DigiCert Inc, CN = DigiCert Global G3 TLS ECC SHA384 2020 CA1 | |
SHA256 Fingerprint=85:A1:DF:2F:31:49:6B:1F:D7:04:A8:43:6D:30:9C:DC:5C:1B:4B:B3:95:6F:B3:1A:73:2A:C1:82:4D:AF:CA:C2 | |
notAfter=Jan 15 23:59:59 2026 GMT | |
subject=C = US, ST = California, L = Los Angeles, O = Internet Corporation for Assigned Names and Numbers, CN = *.example.org |
# Thanks to https://github.com/okieselbach/Intune/blob/master/Convert-AzureAdSidToObjectId.ps1 | |
Function Convert-EntraSidToObjectId { | |
[CmdletBinding()] | |
Param( | |
[Parameter(ValueFromPipeline)] | |
[String]$Sid | |
) | |
Process { | |
$text = $sid.Replace('S-1-12-1-', '') | |
$array = [UInt32[]]$text.Split('-') |
Function Export-AzKeyVaultCertificateToPfx { | |
[CmdletBinding()] | |
Param ( | |
[Parameter(Mandatory)] | |
[string]$Subscription | |
, | |
[Parameter(Mandatory)] | |
[string]$VaultName | |
, | |
[Parameter(Mandatory)] |
Add-Type -AssemblyName System.Windows.Forms | |
Add-Type -AssemblyName System.Windows.Forms.DataVisualization | |
Function Out-LineChart { | |
[CmdletBinding()] | |
Param ( | |
[Parameter(Mandatory, ValueFromPipeline)] | |
[Hashtable]$Data | |
, | |
[Parameter()] |
Row 1 has headings:
Column A contains CIDRs (e.g. 3.2.1.0/30
)
Function Convert-StringToValidateSetParameterCase { | |
Param ( | |
[Parameter(Mandatory)] | |
[System.Management.Automation.InvocationInfo]$InvocationInfo | |
, | |
[Parameter(Mandatory)] | |
[string]$ParameterName | |
, | |
[Parameter(Mandatory)] | |
[AllowEmptyString()] |
function Get-AllCombos { | |
[CmdletBinding()] | |
[OutputType("System.Collections.Generic.List[System.Object]")] | |
Param ( | |
[Parameter(Mandatory)] | |
[AllowEmptyCollection()] | |
#[System.Collections.Generic.List[System.Object]]$arr | |
[System.Collections.Generic.List[System.Object]]$arr | |
) | |
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Stop |
// Specify a value for `testCidr` (must be a valid CIDR; so if just looking for a specific IPv4 IP, append /32 on the end). | |
// Run this and you'll see all IP Groups which contain CIDRs or IPs which overlap in any way with the given value. | |
resourcecontainers | where type == "microsoft.resources/subscriptions" | limit 1 // this is a hack to give us a single row | |
| project testCidr = "123.123.123.123/32" // update this value to the CIDR you're interested in | |
| extend testCidrSplit = array_concat(split(split(testCidr, '/')[0],'.'), split(split(testCidr, '/')[1],'x')) | |
| extend testCidrFirstIp = toint(testCidrSplit[0]) * 16777216 + toint(testCidrSplit[1]) * 65536 + toint(testCidrSplit[2]) * 256 + toint(testCidrSplit[3]) | |
| extend testCidrLastIp = testCidrFirstIp + pow(2,32-testCidrSplit[4])-1 | |
| extend joinhack = 1 | |
| join kind = inner |
<# | |
.SYNOPSIS | |
Used to help migrate R53 zones by converting the JSON obtained by | |
extracting all record sets from a zone to the JSON required to upload | |
these recordsets to another zone. | |
.DESCRIPTION | |
Covers those tasks described in step 4 of [Migrating an AWS Zone](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/hosted-zones-migrating.html#hosted-zones-migrating-create-file) | |
i.e. to convert the output of `aws route53 list-resource-record-sets --hosted-zone-id <hosted-zone-id>` | |
... to the input of `aws route53 change-resource-record-sets --hosted-zone-id id-of-new-hosted-zone --change-batch file://path-to-file-that-contains-records` |
Function Copy-FtpItem { | |
[CmdletBinding()] | |
Param ( | |
[Parameter(Mandatory, ValueFromPipeline)] | |
[string[]]$Path | |
, | |
[Parameter(Mandatory)] | |
[string]$FtpHost |