Czy mogę to zrobić z jakimś interfejsem API, z którego nie korzystam, czy muszę wymyślić przeniesienie the C# .NET API calls mentioned here do PowerShell, aby tak się stało w skrypcie?Zdobądź zapisane w pamięci podręcznej poświadczenia w PowerShell z Windows 7 Credential Manager
7
A
Odpowiedz
7
Można użyć Add-Type
komandletu łatwo portu niego wierzę:
$sig = @"
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NativeCredential
{
public UInt32 Flags;
public CRED_TYPE Type;
public IntPtr TargetName;
public IntPtr Comment;
public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
public UInt32 CredentialBlobSize;
public IntPtr CredentialBlob;
public UInt32 Persist;
public UInt32 AttributeCount;
public IntPtr Attributes;
public IntPtr TargetAlias;
public IntPtr UserName;
internal static NativeCredential GetNativeCredential(Credential cred)
{
NativeCredential ncred = new NativeCredential();
ncred.AttributeCount = 0;
ncred.Attributes = IntPtr.Zero;
ncred.Comment = IntPtr.Zero;
ncred.TargetAlias = IntPtr.Zero;
ncred.Type = CRED_TYPE.GENERIC;
ncred.Persist = (UInt32)1;
ncred.CredentialBlobSize = (UInt32)cred.CredentialBlobSize;
ncred.TargetName = Marshal.StringToCoTaskMemUni(cred.TargetName);
ncred.CredentialBlob = Marshal.StringToCoTaskMemUni(cred.CredentialBlob);
ncred.UserName = Marshal.StringToCoTaskMemUni(System.Environment.UserName);
return ncred;
}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct Credential
{
public UInt32 Flags;
public CRED_TYPE Type;
public string TargetName;
public string Comment;
public System.Runtime.InteropServices.ComTypes.FILETIME LastWritten;
public UInt32 CredentialBlobSize;
public string CredentialBlob;
public UInt32 Persist;
public UInt32 AttributeCount;
public IntPtr Attributes;
public string TargetAlias;
public string UserName;
}
public enum CRED_TYPE : uint
{
GENERIC = 1,
DOMAIN_PASSWORD = 2,
DOMAIN_CERTIFICATE = 3,
DOMAIN_VISIBLE_PASSWORD = 4,
GENERIC_CERTIFICATE = 5,
DOMAIN_EXTENDED = 6,
MAXIMUM = 7, // Maximum supported cred type
MAXIMUM_EX = (MAXIMUM + 1000), // Allow new applications to run on old OSes
}
public class CriticalCredentialHandle : Microsoft.Win32.SafeHandles.CriticalHandleZeroOrMinusOneIsInvalid
{
public CriticalCredentialHandle(IntPtr preexistingHandle)
{
SetHandle(preexistingHandle);
}
public Credential GetCredential()
{
if (!IsInvalid)
{
NativeCredential ncred = (NativeCredential)Marshal.PtrToStructure(handle,
typeof(NativeCredential));
Credential cred = new Credential();
cred.CredentialBlobSize = ncred.CredentialBlobSize;
cred.CredentialBlob = Marshal.PtrToStringUni(ncred.CredentialBlob,
(int)ncred.CredentialBlobSize/2);
cred.UserName = Marshal.PtrToStringUni(ncred.UserName);
cred.TargetName = Marshal.PtrToStringUni(ncred.TargetName);
cred.TargetAlias = Marshal.PtrToStringUni(ncred.TargetAlias);
cred.Type = ncred.Type;
cred.Flags = ncred.Flags;
cred.Persist = ncred.Persist;
return cred;
}
else
{
throw new InvalidOperationException("Invalid CriticalHandle!");
}
}
override protected bool ReleaseHandle()
{
if (!IsInvalid)
{
CredFree(handle);
SetHandleAsInvalid();
return true;
}
return false;
}
}
[DllImport("Advapi32.dll", EntryPoint = "CredReadW", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern bool CredRead(string target, CRED_TYPE type, int reservedFlag, out IntPtr CredentialPtr);
[DllImport("Advapi32.dll", EntryPoint = "CredFree", SetLastError = true)]
public static extern bool CredFree([In] IntPtr cred);
"@
Add-Type -MemberDefinition $sig -Namespace "ADVAPI32" -Name 'Util'
$targetName = "computer"
$nCredPtr= New-Object IntPtr
$success = [ADVAPI32.Util]::CredRead($targetName,1,0,[ref] $nCredPtr)
if($success){
$critCred = New-Object ADVAPI32.Util+CriticalCredentialHandle $nCredPtr
$cred = $critCred.GetCredential()
$password = $cred.CredentialBlob;
write-host -fore blue $password
}
Adaptacja tutaj: http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/e91769eb-dbce-4e77-8b61-d3e55690b511/
podstawie: http://blogs.msdn.com/b/peerchan/archive/2005/11/01/487834.aspx
1
to już zostało zrobione:
http://gallery.technet.microsoft.com/scriptcenter/PowerShell-Credentials-d44c3cde/view/Discussions
Zapewnia kilka metod związanych z wierzycielem i jest już udokumentowana.
Powiązane problemy
- 1. Uzyskiwanie dostępu do Windows Credential Manager z PowerShell
- 2. Jak zresetować zapisane poświadczenia w 'git credential-osxkeychain'?
- 3. Jak wyłączyć Git Credential Manager dla Windows?
- 4. Powershell Remoting with credential
- 5. Wyczyść zapisane poświadczenia TFS w Visual Studio 2017
- 6. Windows Credential Provider z C#
- 7. PowerShell - hasło dekodowania Get-Credential?
- 8. W dostawcy PowerShell, kiedy odświeżasz vs dane pamięci podręcznej?
- 9. polecenia PowerShell do usuwania pozycji z AppFabric pamięci podręcznej
- 10. Uzyskiwanie dostępu do plików w pamięci podręcznej rozproszonej pamięci podręcznej
- 11. Usługa pamięci podręcznej w pamięci podręcznej - Tridion 2011 SP1
- 12. Interfejs API pamięci podręcznej Wininet wisi w Windows 8
- 13. Uzyskaj listę kluczy pamięci podręcznej w Django
- 14. Wygasanie pamięci podręcznej operacji z niestandardową ścieżką pamięci podręcznej
- 15. Pamięć podręczna zapisu z pamięci podręcznej z systemu Windows CLI
- 16. Zapisz referencje GIT za pomocą Git Credential Manager dla Windows - Nie działa
- 17. Brakujące błędy w pamięci podręcznej?
- 18. Błędy pamięci podręcznej AppFabric
- 19. Microsoft.SqlServer.Types.dll w pamięci podręcznej Global Assembly Cache?
- 20. Jak zmienić ścieżkę pamięci podręcznej dla npm (lub całkowicie wyłączyć pamięć podręczną) w systemie Windows?
- 21. Jak skopiować duży plik do/z udziału sieciowego w systemie Windows bez nadpisywania pamięci podręcznej plików? PowerShell lub .NET, najlepiej
- 22. Wyświetl dane w pamięci podręcznej w System.Web.HttpRuntime.Cache
- 23. Spring + Hibernate: Planowanie pamięci podręcznej Wykorzystanie pamięci podręcznej
- 24. Android: Strategia pamięci podręcznej obrazu i rozmiar pamięci podręcznej
- 25. uwsgi w windows 7
- 26. Cards.dll w Windows 7
- 27. Wymuś usunięcie pamięci podręcznej
- 28. rozproszona technologia pamięci podręcznej
- 29. Ile bajtów kontroler pamięci podręcznej pobiera czas z pamięci głównej do pamięci podręcznej L2?
- 30. Maksymalny rozmiar pamięci podręcznej
Myślę, że faktycznie przeszedłem przez to zawstydzająco, ale myślałem, że musi być łatwiejszy sposób. Jestem obrażony, że nie jest łatwiejszy sposób na wyciągnięcie bezpiecznych referencji dla skryptu w Windows Land, ale myślę, że powinienem przestać być zaskoczony. Zaktualizuję ten post, gdy będę mieć więcej czasu na przetestowanie go. Dzięki. – songei2f
Dzięki za ten koleś. – songei2f