Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions fscps.tools/changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Changelog
## 1.0.0 (2024-03-27)
- New: Some Stuff
- Upd: Moar Stuff
- Fix: Much Stuff
## 1.1.0 (2026-02-23)
- New: Get-FSCPSNuget now supports `-KnownVersion` and `-KnownType` parameters to resolve NuGet versions from short FNO versions (e.g. `10.0.45`) with GA/Latest strategy
- New: Added `VersionStrategy` enum (GA, Latest)
- Fix: Fixed Cyrillic character in variable names in `Invoke-CloudRuntimeAssembliesImport` that caused parse errors
- Upd: Get-FSCPSNuget now automatically creates the destination path if it does not exist

29 changes: 28 additions & 1 deletion wiki/How-To-Download-FSC-NuGets.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ Import-Module -Name fscps.tools

[[images/tutorials/Import-Module-Administrator.gif]]

## **Download NuGets**
## **Download NuGets using exact version**

If you already know the exact NuGet version (e.g. `10.0.1777.99`), you can download packages directly:

```
$DynamicsVersion = "10.0.39"
Expand All @@ -40,5 +41,31 @@ Get-ChildItem $PackagesDirectory

[[images/howto/How-To-Download-FSC-NuGets.gif]]

## **Download NuGets using FNO version (KnownVersion)**

You can also use the short FNO version (e.g. `10.0.45`) and let the cmdlet automatically resolve the correct NuGet version. Use the `-KnownType` parameter to choose between `GA` (General Availability) and `Latest` versions.

```
$DynamicsVersion = "10.0.45"
$PackagesDirectory = "C:\Temp\NuGets\$DynamicsVersion"

# Download all NuGet packages for the GA version
Get-FSCPSNuget -KnownVersion $DynamicsVersion -KnownType GA -Type PlatformCompilerPackage -Path $PackagesDirectory -Force
Get-FSCPSNuget -KnownVersion $DynamicsVersion -KnownType GA -Type PlatformDevALM -Path $PackagesDirectory -Force
Get-FSCPSNuget -KnownVersion $DynamicsVersion -KnownType GA -Type ApplicationDevALM -Path $PackagesDirectory -Force
Get-FSCPSNuget -KnownVersion $DynamicsVersion -KnownType GA -Type ApplicationSuiteDevALM -Path $PackagesDirectory -Force
Get-ChildItem $PackagesDirectory
```

To download the **Latest** available version instead of GA:

```
Get-FSCPSNuget -KnownVersion "10.0.45" -KnownType Latest -Type PlatformCompilerPackage -Path "C:\Temp\NuGets" -Force
```

> **Note:** The `-KnownType` parameter accepts two values:
> - `GA` — resolves to the General Availability (stable) NuGet version
> - `Latest` — resolves to the latest available NuGet version

## **Closing comments**
In this tutorial we showed you how to download D365FSC nuget packages.
83 changes: 83 additions & 0 deletions wiki/How-To-Download-System-Update-Package.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
This tutorial will show you how to download D365FSC system update packages (service updates, previews, quality updates) using fscps.tools.

## **Prerequisites**
* PowerShell 5.1
* fscps.tools module installed
* Azure Storage Account configured with the update packages (see [[Work with Azure Storage Account]])

Please visit the [Install as a Administrator](https://github.com/fscpscollaborative/fscps.tools/wiki/Tutorial-Install-Administrator) or the [Install as a non-Administrator](https://github.com/fscpscollaborative/fscps.tools/wiki/Tutorial-Install-Non-Administrator) tutorials to learn how to install the tools.

## **Import module**

```
Import-Module -Name fscps.tools
```

## **Understanding update types**

The `Get-FSCPSSystemUpdatePackage` cmdlet supports the following update types:

| UpdateType | Description |
| :-- | :-- |
| **SystemUpdate** | The GA (General Availability) service update package |
| **Preview** | The preview version of a service update |
| **FinalQualityUpdate** | The final quality update for a version |
| **ProactiveQualityUpdate** | A proactive quality update |

## **Download a system update package**

### **Download the GA service update**

```
Get-FSCPSSystemUpdatePackage `
-UpdateType SystemUpdate `
-D365FSCVersion "10.0.40" `
-OutputPath "C:\Packages\"
```

This will download the service update package for version 10.0.40 and save it to `C:\Packages\`.

### **Download a preview version**

```
Get-FSCPSSystemUpdatePackage `
-UpdateType Preview `
-D365FSCVersion "10.0.41" `
-OutputPath "C:\Packages\"
```

### **Download a final quality update**

```
Get-FSCPSSystemUpdatePackage `
-UpdateType FinalQualityUpdate `
-D365FSCVersion "10.0.40" `
-OutputPath "C:\Packages\"
```

### **Force re-download**

If the package already exists locally, use `-Force` to re-download:

```
Get-FSCPSSystemUpdatePackage `
-UpdateType SystemUpdate `
-D365FSCVersion "10.0.40" `
-OutputPath "C:\Packages\" `
-Force
```

### **Use a custom storage config**

By default the cmdlet uses the `PackageStorage` storage account configuration. You can specify a different one:

```
Get-FSCPSSystemUpdatePackage `
-UpdateType SystemUpdate `
-D365FSCVersion "10.0.40" `
-OutputPath "C:\Packages\" `
-StorageAccountConfig "MyCustomStorage"
```

## **Closing comments**
In this tutorial we showed you how to use `Get-FSCPSSystemUpdatePackage` to download different types of D365FSC update packages. Make sure your Azure Storage Account is configured with the correct packages before using this cmdlet (see [[Work with Azure Storage Account]]).
82 changes: 82 additions & 0 deletions wiki/How-To-Sign-Files.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
This tutorial will show you how to sign D365FSC deployable packages and other files using code signing certificates.

## **Prerequisites**
* PowerShell 5.1
* fscps.tools module installed
* A valid code signing certificate (DigiCert or Azure KeyVault)

Please visit the [Install as a Administrator](https://github.com/fscpscollaborative/fscps.tools/wiki/Tutorial-Install-Administrator) or the [Install as a non-Administrator](https://github.com/fscpscollaborative/fscps.tools/wiki/Tutorial-Install-Non-Administrator) tutorials to learn how to install the tools.

## **Start PowerShell**
Locate the PowerShell icon, if you don't have it on your desktop or in the task pane, we can locate it in the Windows Start Menu. Search for it or type PowerShell.

[[images/tutorials/First-Time-Start-PowerShell-Non-Administrator.gif]]

## **Import module**
You need to import / load the fscps.tools module into the current PowerShell console. Type the following command:

```
Import-Module -Name fscps.tools
```

## **Sign files with DigiCert**

If you have a DigiCert code signing certificate, you can use the `Invoke-FSCPSDigiCertSignFile` cmdlet.

You will need:
* **SM_API_KEY** — your DigiCert API key
* **SM_CLIENT_CERT_FILE_URL** or **SM_CLIENT_CERT_FILE** — URL or local path to the `.p12` certificate file
* **SM_CLIENT_CERT_PASSWORD** — the certificate password (as SecureString)
* **SM_CODE_SIGNING_CERT_SHA1_HASH** — the certificate thumbprint (fingerprint)

```
$certPassword = ConvertTo-SecureString "YourPassword" -AsPlainText -Force

Invoke-FSCPSDigiCertSignFile `
-SM_API_KEY "your-api-key" `
-SM_CLIENT_CERT_FILE "c:\certs\digicert.p12" `
-SM_CLIENT_CERT_PASSWORD $certPassword `
-SM_CODE_SIGNING_CERT_SHA1_HASH "your-cert-thumbprint" `
-FILE "c:\packages\MyPackage.zip"
```

If you have the certificate hosted remotely, use `-SM_CLIENT_CERT_FILE_URL` instead of `-SM_CLIENT_CERT_FILE`:

```
Invoke-FSCPSDigiCertSignFile `
-SM_API_KEY "your-api-key" `
-SM_CLIENT_CERT_FILE_URL "https://your-storage/digicert.p12" `
-SM_CLIENT_CERT_PASSWORD $certPassword `
-SM_CODE_SIGNING_CERT_SHA1_HASH "your-cert-thumbprint" `
-FILE "c:\packages\MyPackage.zip"
```

## **Sign files with Azure KeyVault**

If you store your signing certificate in Azure KeyVault, use the `Invoke-FSCPSAzureSignToolSignFile` cmdlet.

You will need:
* **Uri** — the KeyVault URL (e.g. `https://my-vault.vault.azure.net`)
* **TenantId** — your Azure AD tenant ID
* **CertificateName** — the name of the certificate in KeyVault
* **ClientId** — the Azure AD application (service principal) client ID
* **ClientSecret** — the client secret (as SecureString)

```
$clientSecret = ConvertTo-SecureString "your-client-secret" -AsPlainText -Force

Invoke-FSCPSAzureSignToolSignFile `
-Uri "https://my-vault.vault.azure.net" `
-TenantId "01234567-abcd-ef01-0000-0123456789ab" `
-CertificateName "my-signing-cert" `
-ClientId "01234567-abcd-ef01-0000-0123456789ab" `
-ClientSecret $clientSecret `
-FILE "c:\packages\MyPackage.zip"
```

## **Closing comments**
In this tutorial we showed you two ways to sign files:
- **DigiCert** — using `Invoke-FSCPSDigiCertSignFile` for DigiCert-hosted certificates
- **Azure KeyVault** — using `Invoke-FSCPSAzureSignToolSignFile` for certificates stored in Azure KeyVault

Both approaches are suitable for signing deployable packages, DLLs, and other artifacts in your CI/CD pipeline.
131 changes: 131 additions & 0 deletions wiki/How-To-Work-With-ADO-Test-Cases.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
This tutorial will show you how to work with Azure DevOps (ADO) test cases and test suites using fscps.tools.

## **Prerequisites**
* PowerShell 5.1
* fscps.tools module installed
* Access to an Azure DevOps project with Test Plans
* A valid Azure DevOps Personal Access Token (PAT) with test management permissions

Please visit the [Install as a Administrator](https://github.com/fscpscollaborative/fscps.tools/wiki/Tutorial-Install-Administrator) or the [Install as a non-Administrator](https://github.com/fscpscollaborative/fscps.tools/wiki/Tutorial-Install-Non-Administrator) tutorials to learn how to install the tools.

## **Import module**

```
Import-Module -Name fscps.tools
```

## **Prepare authentication**

All ADO cmdlets require a `-Token` parameter. Use a Bearer token with your PAT:

```
$pat = "your-personal-access-token"
$token = "Bearer " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))
$organization = "my-org"
$project = "my-project"
```

## **Available cmdlets**

| Cmdlet | Description |
| :-- | :-- |
| `Get-FSCPSADOTestCase` | Get details of a specific test case by ID |
| `Get-FSCPSADOTestSuitesByTestPlan` | List all test suites in a test plan |
| `Get-FSCPSADOTestCasesBySuite` | List all test cases in a test suite |
| `Get-FSCPSADOTestSuiteByTestCase` | Find which test suite a test case belongs to |

## **Get test case details**

Retrieve detailed information about a specific test case:

```
Get-FSCPSADOTestCase `
-TestCaseId 1234 `
-Project $project `
-Organization $organization `
-Token $token
```

## **List test suites in a test plan**

Get all test suites from a specific test plan:

```
$suites = Get-FSCPSADOTestSuitesByTestPlan `
-Organization $organization `
-Project $project `
-TestPlanId 100 `
-Token $token

$suites | ForEach-Object {
Write-Host "Suite: $($_.name) (ID: $($_.id))"
}
```

## **List test cases in a test suite**

Get all test cases from a specific test suite within a test plan:

```
$testCases = Get-FSCPSADOTestCasesBySuite `
-TestSuiteId 1001 `
-TestPlanId 100 `
-Organization $organization `
-Project $project `
-Token $token

$testCases | ForEach-Object {
Write-Host "Test Case: $($_.testCase.name) (ID: $($_.testCase.id))"
}
```

## **Find test suite by test case**

Find which test suite a specific test case belongs to:

```
Get-FSCPSADOTestSuiteByTestCase `
-TestCaseId 1234 `
-Project $project `
-Organization $organization `
-Token $token
```

## **Example: Export all test cases from a test plan**

A practical example that lists all test cases across all suites in a test plan:

```
$testPlanId = 100

# Get all suites in the test plan
$suites = Get-FSCPSADOTestSuitesByTestPlan `
-Organization $organization `
-Project $project `
-TestPlanId $testPlanId `
-Token $token

foreach ($suite in $suites) {
Write-Host "=== Suite: $($suite.name) (ID: $($suite.id)) ==="

$testCases = Get-FSCPSADOTestCasesBySuite `
-TestSuiteId $suite.id `
-TestPlanId $testPlanId `
-Organization $organization `
-Project $project `
-Token $token

foreach ($tc in $testCases) {
Write-Host " - $($tc.testCase.name) (ID: $($tc.testCase.id))"
}
}
```

## **Closing comments**
In this tutorial we showed you how to use the ADO test management cmdlets:
- **Get-FSCPSADOTestCase** — get details of a test case
- **Get-FSCPSADOTestSuitesByTestPlan** — list suites in a test plan
- **Get-FSCPSADOTestCasesBySuite** — list test cases in a suite
- **Get-FSCPSADOTestSuiteByTestCase** — find which suite a test case belongs to

These cmdlets are useful for test management automation, reporting, and integration with CI/CD pipelines.
Loading