Pregunta

Me estoy conectando a Exchange 2010 para Live@edu a través de PowerShell. Puedo conectarme usando los métodos estándar bien. Sin embargo, descargar e importar los comandos de sesión cada vez parece un desperdicio, especialmente porque esto no está en una LAN. Además, ocasionalmente, estos scripts devolverán datos a una página web, y el tiempo de importación también parece un desperdicio allí.

He encontrado cómo exportar la sesión utilizando el cmdlet de exportación de exportación. Si importo ese módulo exportado con Import-Module, todo funciona correctamente, excepto por un problema. Cuando ejecuto un cmdlet desde el módulo, espera que interactivamente, a través de una GUI, establezca la contraseña. Lo que realmente quiero es que mis scripts se ejecuten de manera no interactiva, pero aún así cargue el módulo localmente.

¿Es posible hacer esto?

¿Fue útil?

Solución

El problema que enfrenta es que necesita poder establecer la pssession para todas las funciones importadas implícitamente. Para hacer eso necesitas poder ejecutar el Set-PSImplicitRemotingSessionfunción.

Desafortunadamente, esa función no se está exportando, por lo que no puede acceder a ella. Lo que debe hacer para resolver esto es que abre el archivo PSM1 y agregue esa función al final de $script:ExportModuleMember. Ahora, cuando importe el módulo de esa función, será abiliante para establecer su pssession para todas las funciones.

Esto es lo que su PowerShell o scripts necesitará ejecutar para poder usar cualquiera de los módulos importados.

Import-Module "C:\Credentials.psm1"
Import-Module "C:\ExportedPSSession.psm1"
$Cred = Import-Credential -path C:\Cred.xml
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Authentication Basic -AllowRedirection -Credential $Cred
Set-PSImplicitRemotingSession -PSSession $Session -createdByModule $True
#You can now run any of the imported functions.

Credenciales.psm1 ¡Tener cuidado! ¡Cualquiera que pueda cargar el archivo XML ahora puede hacerse pasar por usted!

function Export-Credential($cred, $path) {    
  $cred = $cred | Select-Object *    
  $cred.password = $cred.Password | ConvertFrom-SecureString
  $obj = New-Object psobject
  $obj | Add-Member -MemberType NoteProperty -Name UserName -Value $cred.username
  $obj | Add-Member -MemberType NoteProperty -Name Password -Value $cred.password
  $obj | Export-Clixml $path
}

function Import-Credential($path) {    
  $obj = Import-Clixml $path    
  $obj.password = $obj.Password | ConvertTo-SecureString
    return New-Object system.Management.Automation.PSCredential( $obj.username, $obj.password)
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top