Inedo Community Forums Forums
    • Recent
    • Tags
    • Popular
    • Login

    Welcome to the Inedo Forums! Check out the Forums Guide for help getting started.

    If you are experiencing any issues with the forum software, please visit the Contact Form on our website and let us know!

    Powershell script works outside BuildMaster but not from BuildMaster

    Scheduled Pinned Locked Moved Support
    buildmaster
    6 Posts 2 Posters 15 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J Offline
      jstarbird_7831
      last edited by

      I have a Powershell script the executes a stored procedure and the output to BuildMaster shows all the params it is passing and all the values are correct. However, it will fail complaining about a param of S and a Null value. There is no Null value being passed nor is the any param of S.
      I can take the exact output that is shown in the BuildMaster log and execute that SP in the db and it works without issue.

      I can even take the Powershell script and run it with the same values and it will run.

      Does BuildMaster parse the scripts before running them? This is a script saved in the Script Assets area of BuildMaster.
      Does it run Powershell in some different way? Just trying to figure out why this is happening when I can run it outside BuildMaster just fine.
      This particular SP uses a combination of Strings and Ints for params.

      I know it's not a permissions issue or an SP execution permission as there are some simpler ones that do work.

      Here is what I am doing:

      param([string]$dbServer,[string]$dbName,[string]$SerCustId,[string]$CurVersion,[string]$SerEventLogName,
      			[string]$SerInboundIp,$SerInboundPort,$SerMarketId,[string]$SerOrderImageUrl,[string]$SerOutboundIp,
      			$SerOutboundPort,[string]$SerRuntimeUser,[string]$SerRuntimeUserPwd,[string]$SerSMPatientId,[string]$InstallPath,
      			[string]$SerLogsPath,[string]$SerInboundLogsPath,[string]$SerOutboundLogsPath)
      
      import-module SQLCmd
      
      try {
          $sqlQuery = "exec usp_SerCustomer_Search '"+ $SerCustId +"', NULL, NULL" 
          $dbChk = Invoke-SqlCmd2 -ServerInstance $dbServer -Database $dbName -Query $sqlQuery -ErrorAction Stop
      } Catch {
          write-error "Error: Failed to execute usp_SerCustomer_Search stored procedure. Error Info: $_ "
      }
      
      if ($dbChk.Table.Rows.Count -gt 0)
      {
          $conCurRec = $dbChk.ConcurrencyRecord
      	$sqlQuery = @"
      	exec usp_SerCustomer_Update 
              '$SerCustId',
      		'$InstallPath',
      		'$CurVersion',
      		$conCurRec,
      		'$SerRuntimeUser',
      		'$SerRuntimeUserPwd',
      		'$SerLogsPath',
      		'$SerEventLogName',
      		'$SerInboundIp',
      		$SerInboundPort,
      		'$SerInboundLogsPath',
      		'$SerOutboundIp',
      		$SerOutboundPort,
      		'$SerOutboundLogsPath',
      		'$SerOrderImageURL',
      		'$SerSMPatientId'
      "@
      } elseif ($dbChk.Table.Rows.Count -eq 0)
      {
          $sqlQuery = @"
      	exec usp_SerCustomer_Insert 
      		'$SerCustId',
      		'$InstallPath',
      		'$CurVersion',
      		'$SerRuntimeUser',
      		'$SerRuntimeUserPwd',
      		'$SerLogsPath',
      		'$SerEventLogName',
      		'$SerInboundIp',
      		$SerInboundPort,
      		'$SerInboundLogsPath',
      		'$SerOutboundIp',
      		$SerOutboundPort,
      		'$SerOutboundLogsPath',
      		'$SerSMPatientId',
      		$SerMarketId,
      		'$SerOrderImageURL'
      "@
      }
      
      try {
          Invoke-SqlCmd2 -ServerInstance $dbServer -Database $dbName -Query $sqlQuery -ErrorAction Stop
      } Catch {
          write-error "Error: Failed to execute stored procedure to Update or Insert Customer settings. Error Info: $_ "
      }
      

      Product: BuildMaster
      Version: 5.7.3

      1 Reply Last reply Reply Quote 0
      • ? This user is from outside of this forum
        Guest
        last edited by

        Is there a way to collect Verbose output using PSCall?
        I have it enabled for the module call but I do not get any of the verbose output in the BuildMaster log.

        Also, I tried changing the SqlQuery values into one long string and still have the same issue.
        I do have other scripts with the same module being used and they all work fine but they are simple SP's with 1 or 2 string vars.
        This is the only one I have currently that has mixed value types.

        1 Reply Last reply Reply Quote 0
        • ? This user is from outside of this forum
          Guest
          last edited by

          Probably one of the values is not coming through correctly for some reason. To enable verbose output, it should work to explicitly set VerbosePreference in your script like:

           $VerbosePreference = 'Continue'
          

          That's all we're doing in the other PowerShell operations like PSExec.

          1 Reply Last reply Reply Quote 0
          • ? This user is from outside of this forum
            Guest
            last edited by

            Thanks I'll try setting it that way.

            The script is actually printing out what it is running as, invoke-sqlcmd2 does it, and it shows all the params are fine.

            1 Reply Last reply Reply Quote 0
            • J Offline
              jstarbird_7831
              last edited by

              I believe we finally figured out the issue.
              The Invoke-Sqlcmd does not pass thru plain return values and when run via BuildMaster this was causing the execution to fail. I say while in BuildMaster as I can execute the exact same script outside BuildMaster and not have an error. Even though the try/catch is in the powershelll script.
              I know it shouldn't matter about BuildMaster, just explaining what is occurring.

              In any event if we change the Stored Procedure to do a Return Select 0 rather than Return 0 I can then remove the try/catch and use an IF on the returned row value in the Powershell script.

              Once I did that it is working.

              1 Reply Last reply Reply Quote 0
              • J Offline
                jstarbird_7831
                last edited by

                I should clarify my last post, it does a Return Select 0 only when it is successful.

                1 Reply Last reply Reply Quote 0

                Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                With your input, this post could be even better 💗

                Register Login
                • 1 / 1
                • First post
                  Last post
                Inedo Website Home • Support Home • Code of Conduct • Forums Guide • Documentation