Em Powershell:
Get-AuthenticodeSignature C:\Path\TO\File.exe
Então, usando o seu exemplo de explorer.exe, isso teria Redmond:
(Get-AuthenticodeSignature C:\Windows\explorer.exe).SignerCertificate.subject.split(',')[2].split('=')[1]
Como você solicitou a elaboração, Get-AuthenticodeSignature
retorna um objeto System.Management.Automation.Signature. Você pode descobrir isso de algumas maneiras. Pessoalmente eu prefiro atribuí-lo a uma variável para que eu possa brincar com o objeto retornado ainda mais. Depois de ter atribuído a uma variável, você pode aprender coisas sobre ela. Get-Member
deve ser um dos seus cmdlets em Powershell. Neste caso:
$foo = Get-AuthenticodeSignature C:\Windows\explorer.exe
Get-Member -InputObject $foo
TypeName: System.Management.Automation.Signature
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
IsOSBinary Property bool IsOSBinary {get;}
Path Property string Path {get;}
SignatureType Property System.Management.Automation.SignatureType SignatureType {get;}
SignerCertificate Property System.Security.Cryptography.X509Certificates.X509Certificate2 SignerCertificate {...
Status Property System.Management.Automation.SignatureStatus Status {get;}
StatusMessage Property string StatusMessage {get;}
TimeStamperCertificate Property System.Security.Cryptography.X509Certificates.X509Certificate2 TimeStamperCertific...
Então você pode ver que o objeto tem alguns métodos e algumas propriedades (eu sei, todos os objetos). Nesse caso, os métodos são todos os padrões herdados de System.Object. As propriedades são interessantes. O SignerCertificate parece com o que você queria, então vamos ver o que parece:
$foo.SignerCertificate
Thumbprint Subject
---------- -------
419E77AED546A1A6CF4DC23C1F977542FE289CF7 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
O thumbrint é obviamente importante porque é o que identifica o certificado, mas você perguntou sobre o Redmond que está no assunto. Então agora sabemos como chegar a isso como uma string:
$foo.SignerCertificate.Subject
Portanto, é apenas uma análise de sequência direta daqui.
Mais um pedacinho que vou jogar, pois parece que você está aprendendo o Powershell. Outro cmdlet que você deve tentar regularmente é Get-Command. Neste caso, eu nem sabia que o cmdlet Get-AuthenticodeSignature existia antes de você fazer a pergunta. Então eu fiz isso:
Get-Command *signature*
CommandType Name Version Source
----------- ---- ------- ------
Function Update-MpSignature 1.0 Defender
Cmdlet Get-AuthenticodeSignature 3.0.0.0 Microsoft.PowerShell.Security
Cmdlet Save-VolumeSignatureCatalog 1.0.0.0 ShieldedVMDataFile
Cmdlet Set-AuthenticodeSignature 3.0.0.0 Microsoft.PowerShell.Security