12 Commits

Author SHA1 Message Date
6059c81d84 add libressl conf
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
continuous-integration/drone/tag Build is passing
2022-09-19 16:42:47 +02:00
59ca960f7c fix libressl path 2022-09-19 16:36:14 +02:00
ae1c3d8a83 update lfs attribs 2022-09-19 16:35:58 +02:00
86b58e41ff update libressl to v3.5.3 2022-09-19 16:35:45 +02:00
4e53d8afb3 fix path value
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
continuous-integration/drone/tag Build is passing
2022-09-16 09:56:37 +02:00
534688da73 fix path value
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
continuous-integration/drone/tag Build is failing
2022-09-16 09:53:55 +02:00
19c3686947 fix path value
Some checks failed
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
continuous-integration/drone/tag Build is failing
2022-09-16 09:47:52 +02:00
4476037308 add missing vendor Path
Some checks failed
continuous-integration/drone/pr Build is passing
continuous-integration/drone/tag Build is failing
2022-09-16 09:43:05 +02:00
ddb85d907f addChangelog (#70)
All checks were successful
continuous-integration/drone/push Build is passing
#### 📖 Summary

- adds CHANGELOG.md via DroneHelper

#### 📑 Test Plan

> 💡 Select your test plan for the code changes.

- [x] Tested via Drone.io pipeline
- [ ] Custom test
- [ ] No test plan

##### Details / Justification

<!-- Add your test details or justification for missing tests here. -->

#### 📚 Additional Notes

<!-- A place for additional detail notes. -->

Co-authored-by: OCram85 <marco.blessing@googlemail.com>
Reviewed-on: #70
2022-07-28 15:15:52 +02:00
5bdb383627 updates Readme (#69)
All checks were successful
continuous-integration/drone/push Build is passing
#### 📖 Summary

- fix typos
- Updates several sections

#### 📑 Test Plan

> 💡 Select your test plan for the code changes.

- [x] Tested via Drone.io pipeline
- [ ] Custom test
- [ ] No test plan

##### Details / Justification

<!-- Add your test details or justification for missing tests here. -->

#### 📚 Additional Notes

<!-- A place for additional detail notes. -->

Co-authored-by: OCram85 <marco.blessing@googlemail.com>
Reviewed-on: #69
2022-07-28 10:41:46 +02:00
a95ba31e40 remove optional depenency helper (#68)
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
#### 📖 Summary

- removed optional dependency helper. Moved optional deps into `ExternalModuleDependencies` field.

#### 📑 Test Plan

> 💡 Select your test plan for the code changes.

- [x] Tested via Drone.io pipeline
- [ ] Custom test
- [ ] No test plan

##### Details / Justification

<!-- Add your test details or justification for missing tests here. -->

#### 📚 Additional Notes

<!-- A place for additional detail notes. -->

Co-authored-by: OCram85 <marco.blessing@googlemail.com>
Reviewed-on: #68
2022-07-26 11:33:10 +02:00
1e7dd78c2b adds CiscoUCSCentral connection type (#67)
Some checks reported errors
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build was killed
#### 📖 Summary

- adds CiscoUCSCentrall connection type in `Connect-To` and `Disconnect-From`

#### 📑 Test Plan

> 💡 Select your test plan for the code changes.

- [x] Tested via Drone.io pipeline
- [ ] Custom test
- [ ] No test plan

##### Details / Justification

<!-- Add your test details or justification for missing tests here. -->

#### 📚 Additional Notes

<!-- A place for additional detail notes. -->

Co-authored-by: OCram85 <marco.blessing@googlemail.com>
Reviewed-on: #67
2022-07-19 14:29:25 +02:00
31 changed files with 506 additions and 596 deletions

View File

@ -120,7 +120,7 @@ steps:
Install-Module -Name 'DroneHelper' -Repository 'PSGallery' -ErrorAction 'Stop' -AllowPrerelease -Force; Install-Module -Name 'DroneHelper' -Repository 'PSGallery' -ErrorAction 'Stop' -AllowPrerelease -Force;
Import-Module -Name 'DroneHelper' -ErrorAction 'Stop'; Import-Module -Name 'DroneHelper' -ErrorAction 'Stop';
Install-ModuleDependency; Install-ModuleDependency;
New-BuildPackage -Verbose New-BuildPackage -Verbose -AdditionalPath @('./src/Vendor', './src/openssl.conf')
}" }"
- name: GiteaRelease - name: GiteaRelease

1
.gitattributes vendored
View File

@ -21,4 +21,5 @@
# Vendor resources config # Vendor resources config
src/Vendor/libressl255/* filter=lfs diff=lfs merge=lfs -text src/Vendor/libressl255/* filter=lfs diff=lfs merge=lfs -text
src/Vendor/libressl/* filter=lfs diff=lfs merge=lfs -text
*.pfx filter=lfs diff=lfs merge=lfs -text *.pfx filter=lfs diff=lfs merge=lfs -text

26
CHANGELOG.md Normal file
View File

@ -0,0 +1,26 @@
# Changelog
<!-- insertMark -->
## `v1.1.0`
- (acb09ba) update Changelog
- (5bdb383) updates Readme (#69)
- (a95ba31) remove optional depenency helper (#68)
- (1e7dd78) adds CiscoUCSCentral connection type (#67)
- (b76668c) fix Test-CredentialStoreItem return (#66)
- (ae62ccc) switch to GNU AGPLv3 license (#64)
- (a66e824) adds community contribution for CiscoUCS connection fix (#63)
- (3d90d91) fix lint (PSScriptAnalyzer) issues (#62)
- (d0b7e53) adds DroneHelper (#61)
- (d4b00a5) Migrates to Pester5+ tests (#59)
- (e340466) update references (#60)
- (88743e9) fix pester verbosity config (#58)
- (c31ee79) Update issue templates (#57)
- (c45490a) Update issue templates (#56)
- (4abfec5) adds PR template (#55)
- (7708df9) Update pwsh style to latest community standards (#52)
## `v1.0.542`
- 🧙 pre migrated Gitea version

View File

@ -5,7 +5,10 @@
<p align="center"> <p align="center">
<a href="https://gitea.ocram85.com/OCram85/PSCredentialStore/"> <a href="https://gitea.ocram85.com/OCram85/PSCredentialStore/">
<img src="https://gitea.ocram85.com/OCram85/PSCredentialStore/raw/branch/master/assets/social-logo.png" alt="PSCredentialStore" /> <img
src="https://gitea.ocram85.com/OCram85/PSCredentialStore/raw/branch/master/assets/social-logo.png"
alt="PSCredentialStore"
>
</a> </a>
</p> </p>
@ -19,7 +22,10 @@
<p align="center"> <p align="center">
<a href="https://drone.ocram85.com/OCram85/PSCredentialStore"> <a href="https://drone.ocram85.com/OCram85/PSCredentialStore">
<img src="https://drone.ocram85.com/api/badges/OCram85/PSCredentialStore/status.svg" alt="Master Branch Build Status"> <img
src="https://drone.ocram85.com/api/badges/OCram85/PSCredentialStore/status.svg"
alt="Master Branch Build Status"
>
</a> </a>
<!-- CodeCove disabled for self hosting git <!-- CodeCove disabled for self hosting git
<a href="https://codecov.io/gh/OCram85/PSCredentialStore"> <a href="https://codecov.io/gh/OCram85/PSCredentialStore">
@ -27,23 +33,30 @@
</a> </a>
--> -->
<a href="https://www.powershellgallery.com/packages/PSCredentialStore"> <a href="https://www.powershellgallery.com/packages/PSCredentialStore">
<img src="https://img.shields.io/powershellgallery/v/PSCredentialStore.svg?style=plastic" alt="PowershellGallery Published Version"> <img
src="https://img.shields.io/powershellgallery/v/PSCredentialStore.svg?style=plastic"
alt="PowershellGallery Published Version"
>
</a> </a>
<a href="https://www.powershellgallery.com/packages/PSCredentialStore"> <a href="https://www.powershellgallery.com/packages/PSCredentialStore">
<img src="https://img.shields.io/powershellgallery/vpre/PSCredentialStore.svg?label=latest%20preview&style=plastic" /> <img
src="https://img.shields.io/powershellgallery/vpre/PSCredentialStore.svg?label=latest%20preview&style=plastic"
>
</a> </a>
<a href="https://www.powershellgallery.com/packages/PSCredentialStore"> <a href="https://www.powershellgallery.com/packages/PSCredentialStore">
<img src="https://img.shields.io/powershellgallery/dt/PSCredentialStore.svg?style=plastic" /> <img
src="https://img.shields.io/powershellgallery/dt/PSCredentialStore.svg?style=plastic"
>
</a> </a>
</p> </p>
## :key: General ## :key: General
The PSCredentialStore is a simple credential manager for `PSCredential` objects. It stores PSCredentials in a simple json The PSCredentialStore is a simple credential manager for `PSCredential` objects. It stores PSCredentials in a simple
file. You can choose between a private and shared credential store. The private one exists in your profile and can json file. You can choose between a private and shared credential store. The private one exists in your profile and
ony accessed by your account on the same machine. The shared store enables you to use different credentials for your can ony accessed by your account on the same machine. The shared store enables you to use different credentials for
scripts without exposing them as plain text. your scripts without exposing them as plain text.
PSCredentialStore was developed to simplify the delegation of complex powershell scripts. In this case you often PSCredentialStore was developed to simplify the delegation of complex powershell scripts. In this case you often
need to store credentials for non interactive usage like in scheduled tasks. need to store credentials for non interactive usage like in scheduled tasks.
@ -51,10 +64,10 @@ need to store credentials for non interactive usage like in scheduled tasks.
Starting with version `1.0.0` PSCredential uses Pfx certificates fo encryption. You can use Pfx certificate files Starting with version `1.0.0` PSCredential uses Pfx certificates fo encryption. You can use Pfx certificate files
or certificates stored in the certificate store. or certificates stored in the certificate store.
For more details read the [about_PSCredentialStore](/docs/about_PSCredentialStore.md) page on gitea or via CLI with For more details read the [about_PSCredentialStore](docs/about_PSCredentialStore.md) page on Gitea or via CLI with
`Get-Help about_PSCredentialStore`. `Get-Help about_PSCredentialStore`.
You can find the [reference](/docs/PSCredentialStore.md) in the /docs/ path as well. You can find the full [reference](docs/Readme.md) in the */docs/* path as well.
## :vulcan_salute: Requirements ## :vulcan_salute: Requirements
@ -63,24 +76,26 @@ You can find the [reference](/docs/PSCredentialStore.md) in the /docs/ path as w
## :bomb: About Security ## :bomb: About Security
>This section explains some security topics and the the design decisions we made to balance the usage and security needs. > This section explains some security topics and the design decisions we made to balance the usage and security needs.
To be able to delegate `PSCredentials` objects we can't exclusively rely on the `SecureString` cmdlets. You can't To be able to delegate `PSCredentials` objects we can't exclusively rely on the `SecureString` cmdlets. You can't
decrypt and reuse such credentials from a different user account or even machine. This is caused by automatically decrypt and reuse such credentials from a different user account or even machine. This is caused by automatically
generated encryption key which, is used create a `Secure String` based encrypted string. generated encryption key, which is used create a `Secure String` based encrypted string.
In order to delegate a password, while still using the underlying security framework, we have to provide a custom In order to delegate a password, while still using the underlying security framework, we have to provide a custom
encryption key. This leads to the fact, that everyone who has access to the key could encrypt or decrypt your data. encryption key. This leads to the fact, that everyone who has access to the key could encrypt or decrypt your data.
So we decided to use the public and private keys from valid certificates as part of the custom encryption keys to encrypt your data. So we decided to use the public and private keys from valid certificates as part of the custom encryption keys to
encrypt your data.
This means clearly: Everyone who has access to the `CredentialStore` needs also access to the certificate file to work with it. This means clearly: Everyone who has access to the `CredentialStore` needs also access to the certificate file to
work with it.
Keep in mind you need to secure the access with your NTFS file permissions to avoid unwanted usage. Another option is Keep in mind you need to secure the access with your NTFS file permissions to avoid unwanted usage. Another option
to import the certificate into your certification vaults of you operating system. In this case you can grand the is to import the certificate into your certification vaults of you operating system. In this case you can grand the
permission to the certificates itself. permission to the certificates itself.
Here is s brief hierarchy description of the certificate location: *(First match wins)* Here is a brief hierarchy description for the certificate lookup order: *(First match wins)*
| CredentialStore Type | Certificate Location | | CredentialStore Type | Certificate Location |
| -------------------- | ---------------------- | | -------------------- | ---------------------- |
@ -95,9 +110,9 @@ Here is s brief hierarchy description of the certificate location: *(First match
### :artificial_satellite: PowerShellGallery.com (Recommended Way) ### :artificial_satellite: PowerShellGallery.com (Recommended Way)
* Make sure you use PowerShell 5.1 or higher with `$PSVersionTable`. * Make sure you use PowerShell 5.1 or higher with `$PSVersionTable`.
* Use the builtin PackageManagement and install with: `Import-Module PowerShellGet; Install-Module 'PSCredentialStore' -Repository 'PSGallery'` * Use the builtin PackageManagement + PowerShellGet module and install PSCredentialStore with: `Import-Module PowerShellGet; Install-Module 'PSCredentialStore' -Repository 'PSGallery'`
* Additionally use the `-AllowPrerelease` switch until we publish the final release! * Additionally use the `-AllowPrerelease` switch until we publish the final release!
* Done. Start exploring the Module with `Import-Module PSCredentialStore ; Get-Command -Module PSCredentialStore` * Done. Start exploring the Module with `Import-Module PSCredentialStore; Get-Command -Module PSCredentialStore`
### :building_construction: Manual Way ### :building_construction: Manual Way
@ -109,8 +124,9 @@ Here is s brief hierarchy description of the certificate location: *(First match
### :sparkles: Quick Start ### :sparkles: Quick Start
**1.** First we need a blank credential store. You can decide between a *private* or *shared* store. The private **1.** First we need a blank credential store. You can decide between a *private* or *shared* one.
Credential Store can only be accessed with your profile on the machine you created it.
> :bulb: Note: The private credential store can only be accessed with your profile on the machine you created it.
Starting with version `1.0.0` you can decide the storage type of your fresh created certificate. As default Starting with version `1.0.0` you can decide the storage type of your fresh created certificate. As default
PSCredentialStore creates a new pfx certificate file beside the credential store itself. Optionally you can provide PSCredentialStore creates a new pfx certificate file beside the credential store itself. Optionally you can provide
@ -126,11 +142,12 @@ New-CredentialStore -UseCertStore
# Shared credential store # Shared credential store
New-CredentialStore -Shared New-CredentialStore -Shared
#Shared credential store in custom location # Shared credential store in custom location
New-CredentialStore -Shared -Path 'C:\CredentialStore.json' New-CredentialStore -Shared -Path 'C:\CredentialStore.json'
``` ```
**2.** Now you can manage your credential store items: **2.** Now you can manage your credential store items:
```powershell ```powershell
# This will prompt for credentials and stores it in a private store # This will prompt for credentials and stores it in a private store
New-CredentialStoreItem -RemoteHost 'dc01.myside.local' -Identifier 'AD' New-CredentialStoreItem -RemoteHost 'dc01.myside.local' -Identifier 'AD'
@ -141,7 +158,7 @@ Invoke-Command -ComputerName 'dc01.myside.local' -Credential $DCCreds -ScripBloc
``` ```
The credential store contains also a simple function to establish a connection with several systems or protocols. The credential store contains also a simple function to establish a connection with several systems or protocols.
If you have already installed the underlying framework / modules, you can connect these endpoints: If you have already installed the underlying framework / modules, you can connect to these endpoint types:
* **CiscoUcs** - Establish a connection to a Cisco UCS fabric interconnect. * **CiscoUcs** - Establish a connection to a Cisco UCS fabric interconnect.
* Required Modules: [`Cisco.UCS.Core`, `Cisco.UCSManager`](https://software.cisco.com/download/release.html?i=!y&mdfid=286305108&softwareid=284574017&release=2.1.1) * Required Modules: [`Cisco.UCS.Core`, `Cisco.UCSManager`](https://software.cisco.com/download/release.html?i=!y&mdfid=286305108&softwareid=284574017&release=2.1.1)

View File

@ -1,195 +1,209 @@
--- ---
external help file: ModuleRoot-help.xml external help file: ModuleRoot-help.xml
Module Name: PSCredentialStore Module Name: PSCredentialStore
online version: online version:
schema: 2.0.0 schema: 2.0.0
--- ---
# Connect-To # Connect-To
## SYNOPSIS ## SYNOPSIS
Connects to the given host using the stored CredentialStoreItem. Connects to the given host using the stored CredentialStoreItem.
## SYNTAX ## SYNTAX
### Private (Default) ### Private (Default)
``` ```
Connect-To -RemoteHost <String> [-Identifier <String>] -Type <String> [-Credentials <PSCredential>] [-PassThru] Connect-To -RemoteHost <String> [-Identifier <String>] -Type <String> [-Credentials <PSCredential>] [-PassThru]
[<CommonParameters>] [<CommonParameters>]
``` ```
### Shared ### Shared
``` ```
Connect-To -RemoteHost <String> [-Identifier <String>] -Type <String> [-Credentials <PSCredential>] [-Shared] Connect-To -RemoteHost <String> [-Identifier <String>] -Type <String> [-Credentials <PSCredential>] [-Shared]
[-Path <String>] [-PassThru] [<CommonParameters>] [-Path <String>] [-PassThru] [<CommonParameters>]
``` ```
## DESCRIPTION ## DESCRIPTION
Establish a connection to the selected host using a stored CredentialStoreItem. Establish a connection to the selected host using a stored CredentialStoreItem.
## EXAMPLES ## EXAMPLES
### EXAMPLE 1 ### EXAMPLE 1
``` ```
Connect-To -RemoteHost "ucs.myside.local" -Type CiscoUcs Connect-To -RemoteHost "ucs.myside.local" -Type CiscoUcs
``` ```
### EXAMPLE 2 ### EXAMPLE 2
``` ```
Connect-To -RemoteHost "ftp.myside.local" -Type FTP Connect-To -RemoteHost "ucscentral.myside.local" -Type 'CiscoUcsCentral'
``` ```
### EXAMPLE 3 ### EXAMPLE 3
``` ```
Connect-To -RemoteHost "fas.myside.local" -Type NetAppFAS Connect-To -RemoteHost "ftp.myside.local" -Type FTP
``` ```
### EXAMPLE 4 ### EXAMPLE 4
``` ```
Connect-To -RemoteHost "esx01.myside.local" -Type VMware Connect-To -RemoteHost "fas.myside.local" -Type NetAppFAS
``` ```
### EXAMPLE 5 ### EXAMPLE 5
``` ```
Connect-To -RemoteHost "vCenter.myside.local" -Type CisServer Connect-To -RemoteHost "esx01.myside.local" -Type VMware
``` ```
### EXAMPLE 6 ### EXAMPLE 6
``` ```
Connect-To -RemoteHost "exchange01.myside.local" -Type ExchangeHTTP Connect-To -RemoteHost "vCenter.myside.local" -Type CisServer
``` ```
### EXAMPLE 7 ### EXAMPLE 7
``` ```
Connect-To -RemoteHost "exchange01.myside.local" -Type ExchangeHTTPS Connect-To -RemoteHost "exchange01.myside.local" -Type ExchangeHTTP
``` ```
## PARAMETERS ### EXAMPLE 8
```
### -Credentials Connect-To -RemoteHost "exchange01.myside.local" -Type ExchangeHTTPS
Use this parameter to bypass the stored credentials. ```
Without this parameter Connect-To tries to read the
needed credentials from the CredentialStore. ## PARAMETERS
If you provide this parameter you skip this lookup behavior.
So you can use it to enable credentials without preparing any user interaction. ### -Credentials
Use this parameter to bypass the stored credentials.
```yaml Without this parameter Connect-To tries to read the
Type: PSCredential needed credentials from the CredentialStore.
Parameter Sets: (All) If you provide this parameter you skip this lookup behavior.
Aliases: So you can use it to enable credentials without preparing any user interaction.
Required: False ```yaml
Position: Named Type: PSCredential
Default value: None Parameter Sets: (All)
Accept pipeline input: False Aliases:
Accept wildcard characters: False
``` Required: False
Position: Named
### -Identifier Default value: None
Defaults to "". Accept pipeline input: False
Specify a string, which separates two CredentialStoreItems for the Accept wildcard characters: False
same hostname. ```
```yaml ### -Identifier
Type: String Defaults to "".
Parameter Sets: (All) Specify a string, which separates two CredentialStoreItems for the
Aliases: same hostname.
Required: False ```yaml
Position: Named Type: String
Default value: None Parameter Sets: (All)
Accept pipeline input: False Aliases:
Accept wildcard characters: False
``` Required: False
Position: Named
### -PassThru Default value: None
Returns the value from the underlying connection type function. Accept pipeline input: False
Accept wildcard characters: False
```yaml ```
Type: SwitchParameter
Parameter Sets: (All) ### -PassThru
Aliases: Returns the value from the underlying connection type function.
Required: False ```yaml
Position: Named Type: SwitchParameter
Default value: False Parameter Sets: (All)
Accept pipeline input: False Aliases:
Accept wildcard characters: False
``` Required: False
Position: Named
### -Path Default value: False
Define a custom path to a shared CredentialStore. Accept pipeline input: False
Accept wildcard characters: False
```yaml ```
Type: String
Parameter Sets: Shared ### -Path
Aliases: Define a custom path to a shared CredentialStore.
Required: False ```yaml
Position: Named Type: String
Default value: None Parameter Sets: Shared
Accept pipeline input: False Aliases:
Accept wildcard characters: False
``` Required: False
Position: Named
### -RemoteHost Default value: None
Specify the host, for which you would like to change the credentials. Accept pipeline input: False
Accept wildcard characters: False
```yaml ```
Type: String
Parameter Sets: (All) ### -RemoteHost
Aliases: Specify the host, for which you would like to change the credentials.
Required: True ```yaml
Position: Named Type: String
Default value: None Parameter Sets: (All)
Accept pipeline input: False Aliases:
Accept wildcard characters: False
``` Required: True
Position: Named
### -Shared Default value: None
Switch to shared mode with this param. Accept pipeline input: False
This enforces the command to work with a shared CredentialStore which Accept wildcard characters: False
can be decrypted across systems. ```
```yaml ### -Shared
Type: SwitchParameter Switch to shared mode with this param.
Parameter Sets: Shared This enforces the command to work with a shared CredentialStore which
Aliases: can be decrypted across systems.
Required: True ```yaml
Position: Named Type: SwitchParameter
Default value: False Parameter Sets: Shared
Accept pipeline input: False Aliases:
Accept wildcard characters: False
``` Required: True
Position: Named
### -Type Default value: False
Specify the host type of the target. Accept pipeline input: False
Currently implemented targets are: Possible connection values are: Accept wildcard characters: False
CiscoUcs, FTP, NetAppFAS, VMware, CisServer, ExchangeHTTP, ExchangeHTTPS, SCP. ```
```yaml ### -Type
Type: String Specify the host type of the target.
Parameter Sets: (All) Currently implemented targets are: Possible connection values are:
Aliases:
- CiscoUcs
Required: True - CiscoUcsCentral
Position: Named - CisServer
Default value: None - ExchangeHTTP
Accept pipeline input: False - ExchangeHTTPS
Accept wildcard characters: False - FTP
``` - NetAppFAS
- SCP
### CommonParameters - VMware
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
```yaml
## INPUTS Type: String
Parameter Sets: (All)
### [None] Aliases:
## OUTPUTS
Required: True
### [None] Position: Named
## NOTES Default value: None
Accept pipeline input: False
## RELATED LINKS Accept wildcard characters: False
```
### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
## INPUTS
### [None]
## OUTPUTS
### [None]
## NOTES
## RELATED LINKS

View File

@ -1,124 +1,133 @@
--- ---
external help file: ModuleRoot-help.xml external help file: ModuleRoot-help.xml
Module Name: PSCredentialStore Module Name: PSCredentialStore
online version: online version:
schema: 2.0.0 schema: 2.0.0
--- ---
# Disconnect-From # Disconnect-From
## SYNOPSIS ## SYNOPSIS
Terminates a session established with Connect-To using a CredentialStoreItem. Terminates a session established with Connect-To using a CredentialStoreItem.
## SYNTAX ## SYNTAX
``` ```
Disconnect-From [-RemoteHost] <String> [-Type] <String> [-Force] [<CommonParameters>] Disconnect-From [-RemoteHost] <String> [-Type] <String> [-Force] [<CommonParameters>]
``` ```
## DESCRIPTION ## DESCRIPTION
Terminates a session established with Connect-To using a CredentialStoreItem. Terminates a session established with Connect-To using a CredentialStoreItem.
## EXAMPLES ## EXAMPLES
### EXAMPLE 1 ### EXAMPLE 1
``` ```
Disconnect-From -RemoteHost "ucs.myside.local" -Type CiscoUcs Disconnect-From -RemoteHost "ucs.myside.local" -Type CiscoUcs
``` ```
### EXAMPLE 2 ### EXAMPLE 2
``` ```
Disconnect-From -RemoteHost "ftp.myside.local" -Type FTP Disconnect-From -RemoteHost "ftp.myside.local" -Type FTP
``` ```
### EXAMPLE 3 ### EXAMPLE 3
``` ```
Disconnect-From -RemoteHost "fas.myside.local" -Type NetAppFAS Disconnect-From -RemoteHost "fas.myside.local" -Type NetAppFAS
``` ```
### EXAMPLE 4 ### EXAMPLE 4
``` ```
Disconnect-From -RemoteHost "esx01.myside.local" -Type VMware Disconnect-From -RemoteHost "esx01.myside.local" -Type VMware
``` ```
### EXAMPLE 5 ### EXAMPLE 5
``` ```
Disconnect-From -RemoteHost "esx01.myside.local" -Type VMware -Force:$True Disconnect-From -RemoteHost "esx01.myside.local" -Type VMware -Force:$True
``` ```
### EXAMPLE 6 ### EXAMPLE 6
``` ```
Disconnect-From -RemoteHost "vcenter.myside.local" -Type CisServer Disconnect-From -RemoteHost "vcenter.myside.local" -Type CisServer
``` ```
### EXAMPLE 7 ### EXAMPLE 7
``` ```
Disconnect-From -RemoteHost "exchange01.myside.local" -Type ExchangeHTTP Disconnect-From -RemoteHost "exchange01.myside.local" -Type ExchangeHTTP
``` ```
### EXAMPLE 8 ### EXAMPLE 8
``` ```
Disconnect-From -RemoteHost "exchange01.myside.local" -Type ExchangeHTTPS Disconnect-From -RemoteHost "exchange01.myside.local" -Type ExchangeHTTPS
``` ```
## PARAMETERS ## PARAMETERS
### -Force ### -Force
Force the disconnect, even if the disconnect would fail. Force the disconnect, even if the disconnect would fail.
```yaml ```yaml
Type: SwitchParameter Type: SwitchParameter
Parameter Sets: (All) Parameter Sets: (All)
Aliases: Aliases:
Required: False Required: False
Position: Named Position: Named
Default value: False Default value: False
Accept pipeline input: False Accept pipeline input: False
Accept wildcard characters: False Accept wildcard characters: False
``` ```
### -RemoteHost ### -RemoteHost
Specify the remote endpoint, whose session you would like to terminate. Specify the remote endpoint, whose session you would like to terminate.
```yaml ```yaml
Type: String Type: String
Parameter Sets: (All) Parameter Sets: (All)
Aliases: Aliases:
Required: True Required: True
Position: 1 Position: 1
Default value: None Default value: None
Accept pipeline input: False Accept pipeline input: False
Accept wildcard characters: False Accept wildcard characters: False
``` ```
### -Type ### -Type
Specify the host type of the target. Specify the host type of the target.
Currently implemented targets are: CiscoUcs, FTP, NetAppFAS, VMware, Currently implemented targets are:
CisServer, ExchangeHTTP, ExchangeHTTPS, SCP.
- CiscoUcs
```yaml - CiscoUcsCentral
Type: String - FTP
Parameter Sets: (All) - NetAppFAS
Aliases: - VMware
- CisServer
Required: True - ExchangeHTTP
Position: 2 - ExchangeHTTPS
Default value: None - SCP
Accept pipeline input: False
Accept wildcard characters: False ```yaml
``` Type: String
Parameter Sets: (All)
### CommonParameters Aliases:
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
Required: True
## INPUTS Position: 2
Default value: None
### [None] Accept pipeline input: False
## OUTPUTS Accept wildcard characters: False
```
### [None]
## NOTES ### CommonParameters
This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
## RELATED LINKS
## INPUTS
### [None]
## OUTPUTS
### [None]
## NOTES
## RELATED LINKS

View File

@ -2,7 +2,7 @@
Module Name: PSCredentialStore Module Name: PSCredentialStore
Module Guid: 6800e192-9df8-4e30-b253-eb2c799bbe84 Module Guid: 6800e192-9df8-4e30-b253-eb2c799bbe84
Download Help Link: {{ Update Download Link }} Download Help Link: {{ Update Download Link }}
Help Version: {{ Update Help Version }} Help Version: {{ Please enter version of help manually (X.X.X.X) format }}
Locale: en-US Locale: en-US
--- ---

View File

@ -28,11 +28,10 @@ Use this cmdlet for basic checks with a single item.
Check the item first with this function before Check the item first with this function before
you try to interact with it. you try to interact with it.
> :bulb: Breaking Change for \`v1.1.0+\`: Breaking Change for \`v1.1.0+\`:
> Test-CredentialStoreItem will return \`$false\` even if the store doesn't exist.
> Test-CredentialStoreItem will return \`$false\` even if the store doesn't exist. We removed the terminating
> We removed the terminating error and replaced it with a warning message.
> error and replaced it with a warning message.
## EXAMPLES ## EXAMPLES

View File

@ -1,38 +0,0 @@
{
"Version": 0.1,
"Mandatory": {},
"Optional": [
{
"Name": "foobar2000",
"Modules": [
"foobar2000"
]
},
{
"Name": "foo",
"Modules": [
"foo",
"bar"
]
},
{
"Name": "bar",
"Modules": [
"bar"
]
},
{
"Name": "Existing",
"Modules": [
"PowerShellGet"
]
},
{
"Name": "PSGetMixed",
"Modules": [
"PowerShellGet",
"foobar2000"
]
}
]
}

View File

@ -66,7 +66,7 @@ function New-CSCertificate {
($PSVersionTable.PSEdition -eq 'Desktop' -and $PSVersionTable.PSVersion.Major -lt 6) -or ($PSVersionTable.PSEdition -eq 'Desktop' -and $PSVersionTable.PSVersion.Major -lt 6) -or
($IsWindows -eq $true) ($IsWindows -eq $true)
) { ) {
$openssl = Join-Path -Path $ModuleBase -ChildPath '/Vendor/libressl255/openssl.exe' $openssl = Join-Path -Path $ModuleBase -ChildPath '/Vendor/libressl/openssl.exe'
} }
$Env:OPENSSL_CONF = Join-Path $ModuleBase -ChildPath '/openssl.conf' $Env:OPENSSL_CONF = Join-Path $ModuleBase -ChildPath '/openssl.conf'

View File

@ -15,7 +15,16 @@ function Connect-To {
.PARAMETER Type .PARAMETER Type
Specify the host type of the target. Currently implemented targets are: Possible connection values are: Specify the host type of the target. Currently implemented targets are: Possible connection values are:
CiscoUcs, FTP, NetAppFAS, VMware, CisServer, ExchangeHTTP, ExchangeHTTPS, SCP.
- CiscoUcs
- CiscoUcsCentral
- CisServer
- ExchangeHTTP
- ExchangeHTTPS
- FTP
- NetAppFAS
- SCP
- VMware
.PARAMETER Credentials .PARAMETER Credentials
Use this parameter to bypass the stored credentials. Without this parameter Connect-To tries to read the Use this parameter to bypass the stored credentials. Without this parameter Connect-To tries to read the
@ -41,6 +50,9 @@ function Connect-To {
.EXAMPLE .EXAMPLE
Connect-To -RemoteHost "ucs.myside.local" -Type CiscoUcs Connect-To -RemoteHost "ucs.myside.local" -Type CiscoUcs
.EXAMPLE
Connect-To -RemoteHost "ucscentral.myside.local" -Type 'CiscoUcsCentral'
.EXAMPLE .EXAMPLE
Connect-To -RemoteHost "ftp.myside.local" -Type FTP Connect-To -RemoteHost "ftp.myside.local" -Type FTP
@ -79,6 +91,7 @@ function Connect-To {
[Parameter(Mandatory = $true, ParameterSetName = 'Private')] [Parameter(Mandatory = $true, ParameterSetName = 'Private')]
[ValidateSet( [ValidateSet(
'CiscoUcs', 'CiscoUcs',
'CiscoUcsCentral',
'FTP', 'FTP',
'NetAppFAS', 'NetAppFAS',
'VMware', 'VMware',
@ -117,12 +130,6 @@ function Connect-To {
} }
} }
# First check the optional modules
if (-not (Resolve-Dependency -Name $Type)) {
Write-Error -Message (
"Could not resolve the optional dependencies defined for {0}" -f $Type
) -ErrorAction 'Stop'
}
switch ($Type) { switch ($Type) {
"VMware" { "VMware" {
# Disable the yellow certificate warning, since we haven't replaced the SSL certs for vCenter/ESXi # Disable the yellow certificate warning, since we haven't replaced the SSL certs for vCenter/ESXi
@ -189,6 +196,20 @@ function Connect-To {
Write-Error @MessageParams Write-Error @MessageParams
} }
} }
"CiscoUcsCentral" {
try {
$handle = Connect-UcsCentral -Name $RemoteHost -Credential $creds -NotDefault
$ExecutionContext.SessionState.PSVariable.Set('DefaultUcsCentral', $handle)
}
catch {
$MessageParams = @{
Message = ('Unable to connect to {0} using {1}' -f $RemoteHost, $Type)
ErrorAction = 'Stop'
}
Write-Error @MessageParams
}
}
"FTP" { "FTP" {
# First establish the FTP session # First establish the FTP session
$WinSCPConParams = @{ $WinSCPConParams = @{

View File

@ -14,8 +14,17 @@ function Disconnect-From {
same hostname. same hostname.
.PARAMETER Type .PARAMETER Type
Specify the host type of the target. Currently implemented targets are: CiscoUcs, FTP, NetAppFAS, VMware, Specify the host type of the target. Currently implemented targets are:
CisServer, ExchangeHTTP, ExchangeHTTPS, SCP.
- CiscoUcs
- CiscoUcsCentral
- FTP
- NetAppFAS
- VMware
- CisServer
- ExchangeHTTP
- ExchangeHTTPS
- SCP
.PARAMETER Force .PARAMETER Force
Force the disconnect, even if the disconnect would fail. Force the disconnect, even if the disconnect would fail.
@ -64,6 +73,7 @@ function Disconnect-From {
[Parameter(Mandatory = $true)] [Parameter(Mandatory = $true)]
[ValidateSet( [ValidateSet(
'CiscoUcs', 'CiscoUcs',
'CiscoUcsCentral',
'FTP', 'FTP',
'NetAppFAS', 'NetAppFAS',
'VMware', 'VMware',
@ -85,10 +95,10 @@ function Disconnect-From {
"VMware" { "VMware" {
try { try {
if ($Force) { if ($Force) {
Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction Stop -Force:$true Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop' -Force:$true
} }
else { else {
Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction Stop Disconnect-VIServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop'
} }
} }
@ -104,10 +114,10 @@ function Disconnect-From {
"CisServer" { "CisServer" {
try { try {
if ($Force) { if ($Force) {
Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction Stop -Force:$true Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop' -Force:$true
} }
else { else {
Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction Stop Disconnect-CisServer -Server $RemoteHost -Confirm:$false -ErrorAction 'Stop'
} }
} }
@ -171,10 +181,24 @@ function Disconnect-From {
Write-Error @MessageParams Write-Error @MessageParams
} }
} }
"CiscoUCSCentral" {
try {
$handle = Connect-UcsCentral -Name $RemoteHost -Credential $creds -NotDefault
$ExecutionContext.SessionState.PSVariable.Set('DefaultUcsCentral', $handle)
}
catch {
$MessageParams = @{
Message = "Unable to disconnect from {0} using Type {1}." -f $RemoteHost, $Type
ErrorAction = 'Stop'
}
Write-Error @MessageParams
}
}
"ExchangeHTTP*" { "ExchangeHTTP*" {
try { try {
Get-Variable -Name 'PSExchangeRemote' -Scope Global -ErrorAction Stop Get-Variable -Name 'PSExchangeRemote' -Scope 'Global' -ErrorAction 'Stop'
Remove-PSSession -Session $Global:PSExchangeRemote -ErrorAction Stop Remove-PSSession -Session $Global:PSExchangeRemote -ErrorAction 'Stop'
} }
catch { catch {
$MessageParams = @{ $MessageParams = @{
@ -206,6 +230,4 @@ function Disconnect-From {
} }
} }
} }
end {}
} }

View File

@ -143,7 +143,32 @@
# RequireLicenseAcceptance = $false # RequireLicenseAcceptance = $false
# External dependent modules of this module # External dependent modules of this module
# ExternalModuleDependencies = @() ExternalModuleDependencies = @(
@{
ModuleName = 'VMware.VimAutomation.Core'
ModuleVersion = '6.5.2.6234650'
},
@{
ModuleName = 'VMware.VimAutomation.Cis.Core'
ModuleVersion = '6.5.4.6983166'
},
@{
ModuleName = 'Cisco.UCS.Core'
ModuleVersion = '2.3.1.5'
},
@{
ModuleName = 'Cisco.UCSManager'
ModuleVersion = '2.5.2.2'
},
@{
ModuleName = 'WinSCP'
ModuleVersion = '5.17.8.1'
},
@{
ModuleName = 'DataONTAP'
ModuleVersion = '9.7.1.1'
}
)
} # End of PSData hashtable } # End of PSData hashtable

View File

@ -1,60 +0,0 @@
BeforeAll {
$ManifestFile = (Get-Item -Path "./src/*.psd1").FullName
Import-Module $ManifestFile -Force
$PrivateFunctions = (Get-ChildItem -Path "./src/Private/*.ps1" | Where-Object {
$_.BaseName -notmatch '.Tests'
}
).FullName
foreach ( $func in $PrivateFunctions) {
. $func
}
}
Describe "Resolve-Dependency" {
Context "Basic syntax check" {
BeforeAll {
Mock Get-ModuleBase {
return (Join-Path -Path $PWD -ChildPath '/resources')
}
Mock Test-Module {
return $true
}
}
It "Test1: Should not throw" {
{ Resolve-Dependency -Name 'foobar2000' } | Should -Not -Throw
}
It "Test2: Output type should be bool" {
Resolve-Dependency -Name 'foobar2000' | Should -BeOfType bool
}
}
Context "Enforce Error" {
# Return incorrect module base to enforce there is no config file.
Mock Get-ModuleBase {
if ($IsWindows) { return "C:\" }
elseif ($isLinux) { return "/" }
}
It "Missing dependency file should not cause an error" {
{ Resolve-Dependency -Name 'awesome' } | Should -Not -Throw
}
It "Missing dependency file should return true" {
Resolve-Dependency -Name 'awesome' | Should -Be $true
}
}
Context "Testing input variations" {
It "Should return true if all given dependencies exist" {
Mock Get-ModuleBase {
return (Join-Path -Path $PWD -ChildPath '/resources')
}
Resolve-Dependency -Name 'Existing' | Should -Be $true
}
It "Mixed results should return false" {
Mock Get-ModuleBase {
return (Join-Path -Path $PWD -ChildPath '/resources')
}
Resolve-Dependency -Name 'PSGetMixed' | Should -Be $false
}
}
}

View File

@ -1,87 +0,0 @@
function Resolve-Dependency {
<#
.SYNOPSIS
Tests defined optional dependencies and returns the result as bool.
.DESCRIPTION
Use this function to test for optional modules. You can use it if you provide functions which needs special
modules but you don't want to make them required.
Place a file called Dependency.json in your module root dir. The default format is:
{
"Version": 0.1,
"Mandatory": {},
"Optional": [
{
"Name": "VMware",
"Modules": [
"VMware.VimAutomation.Core"
]
},
{
"Name": "CiscoUCS",
"Modules": []
}
]
}
.PARAMETER Name
Select the dependency item name you defined in the dependency.json.
.INPUTS
[None]
.OUTPUTS
[bool]
.EXAMPLE
If (-not (Resolve-Dependency -Name 'VMware')) {
Write-Error -Message (
"Could not resolve the optional dependencies defined for {0}" -f 'VMware'
) -ErrorAction 'Stop'
}
#>
[OutputType([bool])]
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[string]$Name
)
begin {
$ModuleRootDir = Get-ModuleBase
$DepFilePath = Join-Path -Path $ModuleRootDir -ChildPath "Dependency.json"
if (Test-Path -Path $DepFilePath) {
$Dependency = Get-Content -Path $DepFilePath -Raw -Encoding UTF8 | ConvertFrom-Json
}
else {
Write-Warning ("Could not find the dependency file: {0}" -f $DepFilePath)
}
}
process {
# ScriptAnalyzer issue workaround (unused var)
$null = $Name
$SelectedDependency = $Dependency.Optional | Where-Object { $_.Name -match $Name }
# return true if there is no dependency defined
if ($null -eq $SelectedDependency) {
return $true
}
$res = @()
foreach ($Module in $SelectedDependency.Modules) {
$res += Test-Module -Name $Module
}
# return false if there was not module at all
if (($res -contains $false) -or ($res.Count -eq 0)) {
return $false
}
else {
return $true
}
}
end {}
}

BIN
src/Vendor/libressl/openssl.exe (Stored with Git LFS) vendored Normal file

Binary file not shown.

BIN
src/Vendor/libressl255/libcrypto-41.dll (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libcrypto-41.exp (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libcrypto-41.lib (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libcrypto-41.pdb (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libssl-43.dll (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libssl-43.exp (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libssl-43.lib (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libssl-43.pdb (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libtls-15.dll (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libtls-15.exp (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libtls-15.lib (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/libtls-15.pdb (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/ocspcheck.exe (Stored with Git LFS) vendored

Binary file not shown.

BIN
src/Vendor/libressl255/openssl.exe (Stored with Git LFS) vendored

Binary file not shown.