use strict; use warnings; use Win32::Security::SID; my @SIDTYPE = qw( ERROR SidTypeUser SidTypeGroup SidTypeDomain SidTypeAlias SidTypeWellKnownGroup SidTypeDeletedAccount SidTypeInvalid SidTypeUnknown SidTypeComputer SidTypeLabel ); my ( $system, $account ); $account = Win32::LoginName; $system = Win32::NodeName; GetSID( $system, "$system\\$account"); GetSID( $system, $account); GetSID( $system, $system); GetSID( $system, "$system\\"); GetSID( $system, "\\$system"); GetSID( $system, "SYSTEM\\$system"); GetSID( $system, "\$$system"); GetSID( $system, "$system\$"); GetSID( $system, "$system\\\$"); sub GetSID { my $system = shift; my $account = shift; my $domain = shift; no warnings 'uninitialized'; my ( $sid, $sidtype ); Win32::LookupAccountName( $system, $account, $domain, $sid, $sidtype ); my $sidstring = Win32::Security::SID::ConvertSidToStringSid( $sid ); print "\n", "$system - $account - $domain\n", "SID: $sidstring\n", "SIDTYPE: $SIDTYPE[$sidtype]\n"; ; }