microsoftgraph / powershell-intune-samples

This repository of PowerShell sample scripts show how to access Intune service resources. They demonstrate this by making HTTPS RESTful API requests to the Microsoft Graph API from PowerShell.
MIT License
1.36k stars 657 forks source link

Win32_Application_Add.ps1 / Upload-Win32Lob aborting #212

Open TheCloudCrafter opened 2 years ago

TheCloudCrafter commented 2 years ago

I've been learning powershell and I'm responsible for creating packages across multiple tenants. I'm trying to leverage Upload-Win32Lob and I can't seem to get it working. Any assistance would be immensely appreciated. I'm new to automation and this would make my life loads easier.

Here is my inputs with a few paths and fluff omitted:

import-module microsoft.graph.intune
. "$workdir\Import_Win32_Application_Functions.ps1"
. "$workdir\Import_Win32_Application_Table.ps1"

Connect-MSGraph
Get-AuthToken 

$UploadAppName = "adobereader"

# Win32 Application Upload
$PackageData = $AppPackagesTable | ? {$_.name -ilike $UploadAppName}
$SourceFile = "$PackageDir\$($PackageData.SourceFile)"

Upload-Win32Lob `
    -SourceFile $SourceFile `
    -publisher $PackageData.publisher `
    -description $PackageData.description `
    -detectionRules $PackageData.detectionRules `
    -returnCodes $PackageData.returnCodes `
    -installCmdLine $PackageData.installCmdLine `
    -uninstallCmdLine $PackageData.uninstallCmdLine

PS C:\> $PackageData
returnCodes      : {System.Collections.Hashtable, System.Collections.Hashtable, System.Collections.Hashtable, 
                   System.Collections.Hashtable...}
description      : This free PDF reader app lets you view, comment, fill out, and sign PDF forms to help you move 
                   through your workflow quickly and efficiently.
uninstallCmdLine : "powershell.exe -executionpolicy Bypass .\uninstall.ps1"
SourceFile       : acroread.intunewin
installCmdLine   : powershell.exe -executionpolicy Bypass .\install.ps1
Name             : AdobeReader
detectionRules   : {productVersion, productCode, productVersionOperator, @odata.type}
publisher        : Adobe
displayName      : Adobe Reader DC 2020 Classic Track - 2022-06-04

PS C:\> $PackageData.returnCodes

Name                           Value                                                                              
----                           -----                                                                              
returnCode                     0                                                                                  
type                           success                                                                            
returnCode                     1707                                                                               
type                           success                                                                            
returnCode                     3010                                                                               
type                           softReboot                                                                         
returnCode                     1641                                                                               
type                           hardReboot                                                                         
returnCode                     1618                                                                               
type                           retry                                                                              

PS C:\> $PackageData.detectionRules

Name                           Value                                                                              
----                           -----                                                                              
productVersion                                                                                                    
productCode                    {23170F69-40B1-2702-1604-000001000000}                                             
productVersionOperator         notConfigured                                                                      
@odata.type                    #microsoft.graph.win32LobAppProductCodeDetection      

Here is my error:

Source file found.
Testing if SourceFile 'C:\Users\PATH\AdobeReaderClassic.intunewin' Path is valid...

Creating JSON data to pass to the service...

Creating application in Intune...

Aborting with exception: System.Management.Automation.MethodInvocationException: Exception calling "Serialize" with
 "2" argument(s): "Object Graph cannot be null.
Parameter name: graph" ---> System.ArgumentNullException: Object Graph cannot be null.
Parameter name: graph
   at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __Bin
aryWriter serWriter, Boolean fCheck)
   at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object g
raph, Header[] headers, Boolean fCheck)
   at CallSite.Target(Closure , CallSite , Object , Object , Object )
   --- End of inner exception stack trace ---
   at System.Management.Automation.ExceptionHandlingOps.CheckActionPreference(FunctionContext funcContext, Exceptio
n exception)
   at System.Management.Automation.Interpreter.ActionCallInstruction`2.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
   at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
TheCloudCrafter commented 2 years ago

Looking at the sample I realized I skipped out on the beginning. So I added that to my code and got a new (400) Bad Request error.

Test-AuthToken
$baseUrl = "https://graph.microsoft.com/beta/deviceAppManagement/"
$logRequestUris = $true;
$logHeaders = $false;
$logContent = $true;
$azureStorageUploadChunkSizeInMb = 6l;
$sleep = 30
Testing if SourceFile 'C:\PATH\acroread.intunewin' Path is valid...

Creating JSON data to pass to the service...

Creating application in Intune...
POST https://graph.microsoft.com/deviceAppManagement/mobileApps
{
    "msiInformation":  null,
    "description":  "This free PDF reader app lets you view, comment, fill out, and sign PDF forms to help you move
 through your workflow quickly and efficiently.",
    "displayName":  "Adobe Acrobat Reader 2020 MUI",
    "minimumSupportedOperatingSystem":  {
                                            "v10_1607":  true
                                        },
    "fileName":  "IntunePackage.intunewin",
    "@odata.type":  "#microsoft.graph.win32LobApp",
    "privacyInformationUrl":  null,
    "notes":  "",
    "informationUrl":  null,
    "installExperience":  {
                              "runAsAccount":  "system"
                          },
    "owner":  "",
    "installCommandLine":  "powershell.exe -executionpolicy Bypass .\\install.ps1",
    "publisher":  "Adobe",
    "runAs32bit":  false,
    "uninstallCommandLine":  "powershell.exe -executionpolicy Bypass .\\uninstall.ps1",
    "setupFilePath":  "AcroRead.msi",
    "developer":  "",
    "isFeatured":  false,
    "detectionRules":  {
                           "productVersion":  null,
                           "productCode":  "{23170F69-40B1-2702-1604-000001000000}",
                           "productVersionOperator":  "notConfigured",
                           "@odata.type":  "#microsoft.graph.win32LobAppProductCodeDetection"
                       },
    "returnCodes":  [
                        {
                            "returnCode":  0,
                            "type":  "success"
                        },
                        {
                            "returnCode":  1707,
                            "type":  "success"
                        },
                        {
                            "returnCode":  3010,
                            "type":  "softReboot"
                        },
                        {
                            "returnCode":  1641,
                            "type":  "hardReboot"
                        },
                        {
                            "returnCode":  1618,
                            "type":  "retry"
                        }
                    ]
}
POST https://graph.microsoft.com/beta/deviceAppManagement/mobileApps
The remote server returned an error: (400) Bad Request.

Aborting with exception: System.Net.WebException: The remote server returned an error: (400) Bad Request.
   at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.GetResponse(WebRequest request)
   at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord()
TheCloudCrafter commented 2 years ago

I tried another package and looking at this thread I don't understand why my output JSON always says:

    "fileName":  "IntunePackage.intunewin",

This one actually says the real intunewin.

    "fileName": "Deploy-Application.intunewin",

https://github.com/microsoftgraph/powershell-intune-samples/issues/123

My sourcefile is 'acroread.intunewin' and passes the filecheck fine. I find it odd it gets renamed...