Popular New Releases in Automation
puppeteer
13.6.0
playwright
v1.21.1
headless-recorder
v1.1.0
forever
4.0.0
awx
20.1.0
Popular Libraries in Automation
by puppeteer typescript
77484 Apache-2.0
Headless Chrome Node.js API
by microsoft typescript
36789 Apache-2.0
Playwright is a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API.
by checkly javascript
14029 MIT
Chrome extension that records your browser interactions and generates a Playwright or Puppeteer script.
by foreversd javascript
13329 MIT
A simple CLI tool for ensuring that a given script runs continuously (i.e. forever)
by fabric python
13313 BSD-2-Clause
Simple, Pythonic remote execution and deployment.
by prisma-archive typescript
13250 MIT
🖥 Chrome automation made simple. Runs locally or headless on AWS Lambda.
by ansible python
10864 NOASSERTION
AWX Project
by octalmage c
10438 MIT
Node.js Desktop Automation.
by hyb1996 java
10414 MPL-2.0
A UiAutomator on android, does not need root access(安卓平台上的JavaScript自动化工具)
Trending New libraries in Automation
by pyppeteer python
2004 NOASSERTION
Headless chrome/chromium automation library (unofficial port of puppeteer)
by johnlindquist typescript
1467 MIT
Script Kit. Automate Anything.
by Readarr csharp
1453 GPL-3.0
Book Manager and Automation (Sonarr for Ebooks)
by addyosmani javascript
1444 Apache-2.0
Automating Web Performance testing with Puppeteer 🎪
by microsoft javascript
1421 MIT
.NET version of the Playwright testing and automation library.
by natethegreate python
1185 MIT
Automation of censor bar detection
by frikky javascript
693 AGPL-3.0
Shuffle: A general purpose security automation platform. Our focus is on collaboration and resource sharing.
by microsoft csharp
684 MIT
.NET version of the Playwright testing and automation library.
by Akryum typescript
602 MIT
A fast and fun test runner for Vite & Node 🐈️ Powered by Vite ⚡️
Top Authors in Automation
1
17 Libraries
314
2
16 Libraries
78
3
14 Libraries
355
4
12 Libraries
39314
5
12 Libraries
1660
6
11 Libraries
264
7
10 Libraries
236
8
9 Libraries
707
9
8 Libraries
165
10
8 Libraries
145
1
17 Libraries
314
2
16 Libraries
78
3
14 Libraries
355
4
12 Libraries
39314
5
12 Libraries
1660
6
11 Libraries
264
7
10 Libraries
236
8
9 Libraries
707
9
8 Libraries
165
10
8 Libraries
145
Trending Kits in Automation
Ruby is an object-oriented programming language. It is known for its easy readability and reduced lines of code. It also offers a dynamic and rich set of features that make it extremely versatile and flexible. Ruby has been a go-to language for test automation engineers. Ruby automation libraries are gaining popularity over the years as this language has wide support to most modern browsers and operating systems, making it an ideal choice for developing automated scripts. A few of the most popular open source libraries for developers are: Fastlane - The easiest way to automate building and releasing your iOS and Android apps, Capistrano - Remote multi-server automation tool that gives you a cap tool to perform your deployments from the comfort of your command line, Linode - Ruby wrapper for the Linode automation API. The following is a comprehensive list of best Ruby automation open source libraries.
Since its creation in 2008, the Go programming language has taken the world by storm. It's loved by millions of developers, and is the go-to language for many major applications. Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system enables flexible and modular program construction. In addition to the basic procedural programming features of C (static variables, pointers), Go also provides features for concurrent programming such as goroutines (lightweight threads) and channels. If you're one of the people who's in love with Go, you probably know that automation is always a valuable tool in your arsenal. You may be wondering "Why do I need an automation library?" The answer is simple: it can save you a ton of time and effort! Popular open source libraries include: RobotGo - Go Native crossplatform GUI automation, Atlantis - A self-hosted golang application that listens for Terraform pull request events via webhooks, Comply - a SOC2-focused compliance automation tool. Here are some of the best Go automation libraries to check out.
When it comes to web development, we can’t deny the importance of PHP. While HTML and CSS are used for creating the structure and style of a website, PHP is used for building the backend of a website or web app. There are various reasons why it is still one of the most preferred languages for web development. It has an easy learning curve, which makes it ideal for beginners who want to learn to code. It also offers many frameworks that can be used for building websites or web apps from scratch. PHP is among the best automation libraries for web developers. It has a vast array of automation tools and frameworks that help developers develop websites that are fast, secure, and easy to maintain. Some of the most widely used open source libraries among developers include: PHP_CodeSniffer - tokenizes PHP files and detects violations, WordOps - Install and manage a high-performance WordPress stack with a few keystrokes, Grawler - tool written in PHP which comes with a web interface. The entire list of open source libraries are provided below.
C Automation libraries are the best and easiest way to handle all kinds of automation. No matter what kind of tasks you need to do, there is always a solution for it. C is a high-level programming language that can be used in various applications from embedded systems to supercomputers, making it one of the most versatile languages on the planet. Now, talking about C-based automation, it’s flexible and easy to use. The language is used widely by developers all around the globe. Not only in developing software but also in hardware coding. Some of the most popular among developers are: CrazyEye - OpenSource IT Automation Software, Libmodbus - libmodbus is a free software library to send/receive data with a device that respects the Modbus protocol. This library can use a serial port or an Ethernet connection. We have listed the best C Automation Libraries for all types of automation tasks available out there. If you don't know which library you should use or which one will suit your needs, this kit will help you select the right option for you.
C# is one of the most popular programming languages in the entire world and boasts a massive ecosystem of libraries and frameworks. It's also one of the best languages to use for testing automation projects, owing to its ability to interact with all kinds of different software and systems (including Windows applications). We can use automation libraries that allow us to perform repetitive tasks automatically. Some of the most widely used C# Automation open source libraries among developers include: Cake - Cake (C# Make) is a build automation system with a C# DSL to do things like compiling code, copy files/folders, running unit tests, compress files and build NuGet packages; FlubuCore - cross platform build and deployment automation system. You can define your build and deployment scripts in C# using an intuitive fluent interface. The entire list of C# Automation open source libraries are provided below.
Java remains one of the most popular and widely used programming languages out there. It is a versatile language that can be used in a multitude of environments, from enterprise server-side applications to Android apps. Every job is being automated these days. Java Automation libraries are used to test Java programs without manually executing the tests. In addition to speeding up the testing process, this allows programmers to automate much of their testing, which improves accuracy and lets developers move on to new projects sooner. There are many frameworks that make Java development easier. Due to its advanced functionalities, Selenium is one of the most used Python Automation library. This is an open-source tool that allows developers to create automated tests for web applications. It was designed with automation in mind and supports multiple browsers, including Internet Explorer and Firefox. The Selenium suite includes components like WebDriver, which can be used to automate interactions with pages; Selendroid, which provides a framework for testing native Android apps; and Selenium Grid, which allows teams to collaborate on test execution by running tests simultaneously across different machines or browsers using distributed remote control nodes (such as those provided by Sauce Labs). The following is a comprehensive list of the best Java Automation open source libraries.
C++ automation libraries are a great way to save time and effort while developing a mobile application. Automation libraries allow developers to create and automate processes that are repetitive or tedious. This not only saves the developer time, but it also leaves room for other essential tasks to be done instead of spending time on processes that can be automated. With the growing demand for mobile apps, developers are looking for ways to use automation in their workflow. Some of the most widely used open source libraries among developers include: CPP-Reflection - C++ Reflection Parser / Runtime Skeleton, BAS -Browser Automation Studio can automate everything that Chrome can, wxAutoExcel - wxWidgets library attempting for Excel automation, RPA_CPP - C++ Robotic Process Automation. The following is a comprehensive list of best C++ automation open source libraries.
Here are the top C# Web Automation Frameworks or Libraries that offer tools and APIs for automating web browser actions like navigating between pages, filling out forms, scraping data from web pages, and clicking buttons. These libraries use programming languages to interact with web browsers to execute automation tasks.
Web Automation libraries are commonly used for website scraping, data extraction, and testing. We can also use these for automating repetitive tasks which involve web applications. By using these libraries, developers can save time and effort by automating tasks requiring manual interactions with web browsers.
We have handpicked the top Web Automation libraries for your next project below.
RestSharp:
- Is an open source library for making HTTP requests and handling RESTful APIs in C# applications.
- It simplifies communication with web services and APIs by offering an intuitive and easy-to-use interface.
- Supports different data formats like JSON, form-urlencoded data, and XML, which can handle authentication mechanisms.
AngleSharp:
- Is an open source library for manipulating, rendering, and parsing HTML and XML documents in C# applications.
- Is a flexible and powerful library that offers a comprehensive set of APIs for working with XML and HTML content.
- Is built on top of the .NET standard applications like Xamarin, Unity, and ASP.NET Core.
cake:
- Is an open source build automation tool and scripting language for .NET applications.
- Allows developers to write build scripts with the help of simple and intuitive C# syntax and makes it easy to automate different build and deployment tasks.
- Can execute build tasks parallelly, making the building process quicker and more efficient.
html-agility-pack:
- Is an open source library for parsing HTML documents in .NET applications.
- Provides various APIs for working with HTML documents, allowing developers to manipulate and extract data from the HTML pages easily.
- Offers a comprehensive set of APIs for working on HTML pages widely used for web automation, scraping, and other parsing HTML pages.
Readarr:
- Is an open source library that offers a comprehensive set of tools for managing and organizing e-books in C# applications.
- Offers a web-based user interface allowing users to add or manage e-books quickly.
- It integrates with popular e-book sources like Project Gutenberg and Calibre.
FlaUI:
- Is an open source library for automating Windows user interface using the Microsoft UI Automation API.
- Provides various APIs for interacting with UI elements, allowing developers to automate UI testing and other UI-related tasks.
- Offers a simple and intuitive API for interacting with UI elements, making it easy to write UI automation scripts in C# applications.
AssetGraph:
- Offers a visual editor and various APIs for creating complex asset pipelines, allowing developers to easily manage dependencies between assets and automating complex asset process tasks.
- Allows developers to create a graph of asset processing nodes, where every node will represent a specific asset processing task.
- Is a powerful tool for managing asset pipelines in Unity, which game developers and other Unity developers use for streamlining and improving the workflow.
buildtool:
- Is a Unity utility that automates the process of generating builds.
- Easily kick off batch builds for all or a certain subset of your build configurations.
- Offers features like version number generation and options for more expanded build capabilities like creating zip files, building AssetBundles, and automated file copying or moving.
FlubuCore:
- Is an open source library used to build and automate .NET projects written in C#.
- Offers a fluent interface for defining build scripts, allowing developers to automate complex tasks easily.
- Support various build tasks like running tests, compiling code, deploying applications, etc.
taskt:
- Is an open source library for Robotic Process Automation, enabling users to automate repetitive tasks on their computers.
- Provides various tools and functions for automating tasks like web automation, user interface automation, file operations, and data manipulation.
- Is a powerful tool for automating repetitive tasks and streamlining workflows to increase efficiency and productivity.
Trending Discussions on Automation
In JavaScript, can you reference a method/function name within that method/function?
fastlane: [!] Google Api Error: Invalid request - Package not found: com.example.todo
ExportAsFixedFormat's IgnorePrintAreas parameter seems not to have effect
Script calls other script as .ps1 but not as a .exe using ps2exe
Optionally static class method for interface compatibility
Automatic merging of Dependabot generated Pull Request with codeowners file and branch protection rule?
Powershell package missing/not working on release
Has Variant behavior changed in Delphi 11?
New-CimSession without elevation by providing admin credentials on Windows 10?
Diagnostic setting not included in Azure Portal ARM template export
QUESTION
In JavaScript, can you reference a method/function name within that method/function?
Asked 2022-Mar-28 at 10:35I am building an automation framework in JavaScript for WebdriverIO.
The "out-of-the-box" error messages aren't too helpful and I would like to add the class name and method name as part of a prefix to the error message which is thrown when the method/function fails.
I have managed to call the class name with ClassName.name
However, I have not found a solution to reference the method name without using some hardcoded value.
Below is a summary of the changes I would like to make.
Before:
1setElementValue(element, value){
2 try{
3 this.waitForElementAndScroll(element);
4 $(element).setValue(value);
5 }
6 catch(error){
7 throw `${BasePage.name}.setElementValue: ${error.message}`;
8 }
9}
10
After:
1setElementValue(element, value){
2 try{
3 this.waitForElementAndScroll(element);
4 $(element).setValue(value);
5 }
6 catch(error){
7 throw `${BasePage.name}.setElementValue: ${error.message}`;
8 }
9}
10setElementValue(element, value){
11 try{
12 this.waitForElementAndScroll(element);
13 $(element).setValue(value);
14 }
15 catch(error){
16 throw `${BasePage.name}.${setElementValue.name}: ${error.message}`;
17 }
18}
19
Where ${setElementValue.name}
is the method of referencing the name of the method/function.
Many thanks in advance!
I have tried the following with no success:
method.name //ReferenceError: method is not defined
(method).name //ReferenceError: method is not defined
Function.name //Returns "Function"
Function.value //Returns "undefined"
constructor.name //Returns "Object"
setElementValue.name //ReferenceError: setElementValue is not defined
ANSWER
Answered 2022-Mar-28 at 10:35I found this (very obvious) solution to work for me:
1setElementValue(element, value){
2 try{
3 this.waitForElementAndScroll(element);
4 $(element).setValue(value);
5 }
6 catch(error){
7 throw `${BasePage.name}.setElementValue: ${error.message}`;
8 }
9}
10setElementValue(element, value){
11 try{
12 this.waitForElementAndScroll(element);
13 $(element).setValue(value);
14 }
15 catch(error){
16 throw `${BasePage.name}.${setElementValue.name}: ${error.message}`;
17 }
18}
19this.setElementValue.name
20
where the thrown error message is:
1setElementValue(element, value){
2 try{
3 this.waitForElementAndScroll(element);
4 $(element).setValue(value);
5 }
6 catch(error){
7 throw `${BasePage.name}.setElementValue: ${error.message}`;
8 }
9}
10setElementValue(element, value){
11 try{
12 this.waitForElementAndScroll(element);
13 $(element).setValue(value);
14 }
15 catch(error){
16 throw `${BasePage.name}.${setElementValue.name}: ${error.message}`;
17 }
18}
19this.setElementValue.name
20throw `${BasePage.name}.${this.setElementValue.name}: ${error.message}`;
21
which outputs the following error log when the method fails:
1setElementValue(element, value){
2 try{
3 this.waitForElementAndScroll(element);
4 $(element).setValue(value);
5 }
6 catch(error){
7 throw `${BasePage.name}.setElementValue: ${error.message}`;
8 }
9}
10setElementValue(element, value){
11 try{
12 this.waitForElementAndScroll(element);
13 $(element).setValue(value);
14 }
15 catch(error){
16 throw `${BasePage.name}.${setElementValue.name}: ${error.message}`;
17 }
18}
19this.setElementValue.name
20throw `${BasePage.name}.${this.setElementValue.name}: ${error.message}`;
21`BasePage.setElementValue: element ("#submit-button") still not displayed after 500ms`
22
QUESTION
fastlane: [!] Google Api Error: Invalid request - Package not found: com.example.todo
Asked 2022-Mar-20 at 02:27I am using React-native for my app. I have named my name reactamplify
. I want to deploy my app to Google play-store. For automation deployment I am using first time fastlane
. I found this documentation, follow the steps and give API grant access. In my React native app, I navigate to android
folder then run this command fastlane init
. Give json_key_file
path my downloaded auth json file. But I got confused about package name. I search my app name in vscode com.reactamplify
replace them into com.example.todo
. Then run android folder fastlane supply init
, I am getting this error: [!] Google Api Error: Invalid request - Package not found: com.example.todo.
I really don't know how to fix it :(. Really lost TBH.
When I run fastlane supply
. I got this image
PS: It would be awesome if someone gives me example with images
ANSWER
Answered 2021-Oct-29 at 04:46I found the reason. I need to upload at least one build to google Play store app manually. That’s why I got package name error.
QUESTION
ExportAsFixedFormat's IgnorePrintAreas parameter seems not to have effect
Asked 2022-Mar-10 at 07:43In a Delphi application I am using since years the following code to export xlxs to pdf:
1function TExportTool.ExportExcelToPDF(aFileName, aNewFileName: String): Boolean;
2// reference : http://embarcadero.newsgroups.archived.at/public.delphi.oleautomation/200811/081103142.html
3// unluckily the link above is dead
4{- Sheet is counted from 1 and upwards !! }
5Var
6 App,oWB,oSheet : OleVariant;
7begin
8 Result := False;
9 App:= CreateOleObject('Excel.Application');
10 Try
11 App.Visible:= 0;
12 oWb := App.WorkBooks.Open(ExpandUNCFileName(afilename),1); // Open read only
13 Try
14 oSheet := oWB.ActiveSheet;
15 oSheet.ExportAsFixedFormat(0, //xlTypePDF is constant 0
16 aNewFileName,
17 EmptyParam,
18 EmptyParam,
19 EmptyParam, // this should be IgnorePrintAreas
20 EmptyParam,
21 EmptyParam,
22 EmptyParam,
23 EmptyParam
24 );
25 Finally
26 End;
27 Result := True;
28 Finally
29 App.Quit;
30 App:= UnAssigned;
31 End;
32end;
33
34// IMPROVED WORKING CODE FOLLOWS
35
36function TExportTool.ExportExcelToPDF(aFileName, aNewFileName: String): Boolean;
37// reference : http://embarcadero.newsgroups.archived.at/public.delphi.oleautomation/200811/081103142.html
38{- Sheet is counted from 1 and upwards !! }
39
40procedure RestoreOriginalPrintArea (oSheet: OleVariant);
41// Excel loses print area settings in non-English version of application when file is opened using automation:
42// https://stackoverflow.com/questions/71379893/exportasfixedformats-ignoreprintareas-parameter-seems-not-to-have-effect
43var
44 i:Integer;
45begin
46 for i:= 1 to oSheet.Names.Count do
47 begin
48 if VarToStr(oSheet.Names.Item(i).Name).EndsWith('!Print_Area') then
49 begin
50 oSheet.PageSetup.PrintArea:='Print_area';
51 Break;
52 end;
53 end;
54end;
55
56Var
57 App,oWB,oSheet : OleVariant;
58 i:Integer;
59begin
60 Result := False;
61 App:= CreateOleObject('Excel.Application');
62 Try
63 App.Visible:= 0;
64 oWb := App.WorkBooks.Open(ExpandUNCFileName(afilename),1); // Open read only
65 Try
66 oSheet := oWB.ActiveSheet;
67 RestoreOriginalPrintArea(oSheet); // workaround
68 oSheet.ExportAsFixedFormat(0, //xlTypePDF is constant 0
69 aNewFileName,
70 0, // standard quality = 0, Max quality = 1
71 false, //include doc properties
72 false, //ignore print area
73 EmptyParam,
74 EmptyParam,
75 EmptyParam,
76 EmptyParam
77 );
78 Finally
79 End;
80 Result := True;
81 Finally
82 oWB.Close(false); // better to close the WorkBook too
83 App.Quit;
84 App:= UnAssigned;
85 End;
86end;
87
Now i realized that the pdf created with this code behave like when saving to pdf from Excel using the option "Ignore Print areas" (it is one of the options of the export to pdf from Excel feature).
So I decided to "uncheck" that checkbox also from code and I studied the parameters of ExportAsFixedFormat
(reference here).
The fifth parameter is IgnorePrintAreas
, so I was assuming that passing False to it, the print areas would have been ignored.
I tried several common sense solution, including:
- passing only that parameter (passing either True or False )
- passing all the first 5 parameters (just in case they are mandatory at runtime)
but no result: the pdf created by my application still "ignores the print areas".
Does anyone has a suggestion or has experience on this specific subject to give me a pointer to fix this issue?
Thanks.
UPDATE
Thanks to the useful accepted answer I appended to the code above the solution for reference, notice two things:
- the RestoreOriginalPrintArea procedure that contains the workaround
- the call to oWB.Close(false) at the end
ANSWER
Answered 2022-Mar-10 at 06:48Root cause of error:
Excel loses print area settings in non-English version of application when file is opened using automation.
Why this is happening:
When you define print area in a sheet, Excel internally creates a named range. It has two properties defining its name:
Name
this property is always of the formWorksheetsName!Print_Area
(if the sheet's name contains some special characters it is also enclosed in single quotes).NameLocal
has similar structure, but the second part is translated into the language of the application.
This is what it looks like when you open the file in Excel and inspect these properties in VBA, but when you open the same file using automation (for example using the code in question), then NameLocal
is no longer translated. This bug causes the named range to not be recognized correctly as print area. oSheet.PageSetup.PrintArea
returns an empty string.
Workaround:
Restore original print area after opening the file using:
oSheet.PageSetup.PrintArea:='Print_Area';
This line of code will throw an exception when there was no print area defined in sheet, so there are two options:
- Place the line inside
try
..except
block. - Iterate the
Names
collection and look for aName
ending with!Print_Area
, for example:
1function TExportTool.ExportExcelToPDF(aFileName, aNewFileName: String): Boolean;
2// reference : http://embarcadero.newsgroups.archived.at/public.delphi.oleautomation/200811/081103142.html
3// unluckily the link above is dead
4{- Sheet is counted from 1 and upwards !! }
5Var
6 App,oWB,oSheet : OleVariant;
7begin
8 Result := False;
9 App:= CreateOleObject('Excel.Application');
10 Try
11 App.Visible:= 0;
12 oWb := App.WorkBooks.Open(ExpandUNCFileName(afilename),1); // Open read only
13 Try
14 oSheet := oWB.ActiveSheet;
15 oSheet.ExportAsFixedFormat(0, //xlTypePDF is constant 0
16 aNewFileName,
17 EmptyParam,
18 EmptyParam,
19 EmptyParam, // this should be IgnorePrintAreas
20 EmptyParam,
21 EmptyParam,
22 EmptyParam,
23 EmptyParam
24 );
25 Finally
26 End;
27 Result := True;
28 Finally
29 App.Quit;
30 App:= UnAssigned;
31 End;
32end;
33
34// IMPROVED WORKING CODE FOLLOWS
35
36function TExportTool.ExportExcelToPDF(aFileName, aNewFileName: String): Boolean;
37// reference : http://embarcadero.newsgroups.archived.at/public.delphi.oleautomation/200811/081103142.html
38{- Sheet is counted from 1 and upwards !! }
39
40procedure RestoreOriginalPrintArea (oSheet: OleVariant);
41// Excel loses print area settings in non-English version of application when file is opened using automation:
42// https://stackoverflow.com/questions/71379893/exportasfixedformats-ignoreprintareas-parameter-seems-not-to-have-effect
43var
44 i:Integer;
45begin
46 for i:= 1 to oSheet.Names.Count do
47 begin
48 if VarToStr(oSheet.Names.Item(i).Name).EndsWith('!Print_Area') then
49 begin
50 oSheet.PageSetup.PrintArea:='Print_area';
51 Break;
52 end;
53 end;
54end;
55
56Var
57 App,oWB,oSheet : OleVariant;
58 i:Integer;
59begin
60 Result := False;
61 App:= CreateOleObject('Excel.Application');
62 Try
63 App.Visible:= 0;
64 oWb := App.WorkBooks.Open(ExpandUNCFileName(afilename),1); // Open read only
65 Try
66 oSheet := oWB.ActiveSheet;
67 RestoreOriginalPrintArea(oSheet); // workaround
68 oSheet.ExportAsFixedFormat(0, //xlTypePDF is constant 0
69 aNewFileName,
70 0, // standard quality = 0, Max quality = 1
71 false, //include doc properties
72 false, //ignore print area
73 EmptyParam,
74 EmptyParam,
75 EmptyParam,
76 EmptyParam
77 );
78 Finally
79 End;
80 Result := True;
81 Finally
82 oWB.Close(false); // better to close the WorkBook too
83 App.Quit;
84 App:= UnAssigned;
85 End;
86end;
87var i:Integer;
88for i:= 1 to oSheet.Names.Count do
89begin
90 if VarToStr(oSheet.Names.Item(i).Name).EndsWith('!Print_Area') then
91 begin
92 oSheet.PageSetup.PrintArea:='Print_area';
93 Break;
94 end;
95end;
96
Other important change:
Because the file could have been modified you also need to add:
oWB.Close(false); //do not save changes
before closing the application, otherwise each call to this function would result in another Excel process still running invisible.
QUESTION
Script calls other script as .ps1 but not as a .exe using ps2exe
Asked 2022-Feb-15 at 16:131$password = ConvertTo-SecureString “Password+++” -AsPlainText -Force
2$Cred = New-Object System.Management.Automation.PSCredential ("Admin", $password)
3$FileLocale = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
4Write-Output $FileLocale
5$AntFile = "$FileLocale\StartApps.ps1"
6Write-Output $AntFile
7Start-Process PowerShell.exe -ArgumentList "-command &$AntFile -UserCredential $Cred"
8
Hi, that code works in .ps1, I call the other script, and he makes his job. But when I transform it in .exe with the help of ps2exe, he doesn't do his job anymore. As admin or not. It's not the first time I use that start-process, but it's the first time I use a variable as a target for the command. Do anyone know what go wrong between the ps1 and exe ?
Thanks
ANSWER
Answered 2022-Feb-15 at 16:13While an executable compiled with ps2exe uses a .ps1
file as input, at runtime no actual .ps1
file is involved, which is why PowerShell's command-reflection variables cannot tell you anything about a running script file.
When running an actual .ps1
file, you'd use the following about_Automatic_Variables:
$PSCommandPath
contains the the executing script file's full file path.$PSScriptRoot
contains the script file's full directory path (i.e. the full path of the directory in which the script file is located).
In a ps2exe-compiled executable (.exe
), where these variables have no values, you can use the following instead:
[Environment]::GetCommandLineArgs()[0]
contains the executable file's full file path.Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0])
contains the executable file's full directory path.
Applied to your code - assuming that a separate StartApp.ps1
file is present alongside your .exe
file:[1]
1$password = ConvertTo-SecureString “Password+++” -AsPlainText -Force
2$Cred = New-Object System.Management.Automation.PSCredential ("Admin", $password)
3$FileLocale = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
4Write-Output $FileLocale
5$AntFile = "$FileLocale\StartApps.ps1"
6Write-Output $AntFile
7Start-Process PowerShell.exe -ArgumentList "-command &$AntFile -UserCredential $Cred"
8$FileLocale = Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0])
9$AntFile = Join-Path $FileLocale StartApps.ps1
10
If you want to make your code work in both invocation scenarios - the original .ps1
file directly as well as the compiled .exe
file - use the following:
1$password = ConvertTo-SecureString “Password+++” -AsPlainText -Force
2$Cred = New-Object System.Management.Automation.PSCredential ("Admin", $password)
3$FileLocale = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
4Write-Output $FileLocale
5$AntFile = "$FileLocale\StartApps.ps1"
6Write-Output $AntFile
7Start-Process PowerShell.exe -ArgumentList "-command &$AntFile -UserCredential $Cred"
8$FileLocale = Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0])
9$AntFile = Join-Path $FileLocale StartApps.ps1
10$FileLocale =
11 if ($PSScriptRoot) { $PSScriptRoot }
12 else { Split-Path -LiteralPath ([Environment]::GetCommandLineArgs()[0]) }
13
14$AntFile = Join-Path $FileLocale StartApps.ps1
15
[1] Note that at runtime no information is available about where the original .ps1
file that served as compile-time input was originally located - only that file's content becomes part of the .exe
file.
QUESTION
Optionally static class method for interface compatibility
Asked 2022-Jan-24 at 04:33I've defined a custom ValidateSet parameter attribute like so:
1Class MyValidValuesAttribute : System.Management.Automation.IValidateSetValuesGenerator {
2 [string[]] GetValidValues() { return [string[]]'MyValidValueA','MyValidValueB' }
3}
4
I'd like to avoid having to instantiate the class just to return the set of valid values.
I'd simply call [MyValidValuesAttribute]::GetValidValues()
instead of the two-line
1Class MyValidValuesAttribute : System.Management.Automation.IValidateSetValuesGenerator {
2 [string[]] GetValidValues() { return [string[]]'MyValidValueA','MyValidValueB' }
3}
4$X = [MyValidValuesAttribute]::new()
5$Y = $X.GetValidValues()
6
but that method must not be static or the class will not implement the interface.
Is there any way to make a method work the same way regardless of whether the class has been instantiated under the same name? I know I could just implement GetValidValues_Static
; wondering if a more elegant solution exists.
ANSWER
Answered 2022-Jan-24 at 04:33As Santiago Squarzon points out, you don't usually need to instantiate an IValidateSetValuesGenerator
-implementing class yourself: PowerShell does it for you when you use such a class in a [ValidateSet()]
attribute in order to decorate a parameter in a function's or script's parameter-declaration block (param(...)
), so as to constrain the arguments passed to that parameter to the set of values returned from the specified class' .GetValidValues()
instance method.
Note: The IValidateSetValuesGenerator
interface requires PowerShell (Core) v6+; for solutions that also work in Windows PowerShell, see this blog post that Santiago found.
If you do need to instantiate such a class explicitly:
instead of the two-line
You can use a single(-line) expression:
1Class MyValidValuesAttribute : System.Management.Automation.IValidateSetValuesGenerator {
2 [string[]] GetValidValues() { return [string[]]'MyValidValueA','MyValidValueB' }
3}
4$X = [MyValidValuesAttribute]::new()
5$Y = $X.GetValidValues()
6[MyValidValuesAttribute]::new().GetValidValues()
7
I know I could just implement
GetValidValues_Static
; wondering if a more elegant solution exists.
If you do need to keep the invocation ceremony to a minimum, you can declare a static property as follows, which then allows you to call [MyValidValuesAttribute]::ValidValues
:
1Class MyValidValuesAttribute : System.Management.Automation.IValidateSetValuesGenerator {
2 [string[]] GetValidValues() { return [string[]]'MyValidValueA','MyValidValueB' }
3}
4$X = [MyValidValuesAttribute]::new()
5$Y = $X.GetValidValues()
6[MyValidValuesAttribute]::new().GetValidValues()
7Class MyValidValuesAttribute : System.Management.Automation.IValidateSetValuesGenerator {
8 static [string[]] $ValidValues = [MyValidValuesAttribute]::new().GetValidValues()
9 [string[]] GetValidValues() { return [string[]] ('MyValidValueA','MyValidValueB') }
10}
11
Caveat: Since the static ValidValues
property is only initialized once, the above assumes that that the set of valid values is static, which may be at odds with the intentionally dynamic nature of the IValidateSetValuesGenerator
interface.
- In fact, the dynamic nature is the reason that the interface defines
.GetValidValues()
as an instance method - situationally, a different set of valid values may be returned; otherwise, you could simply use the[ValidateSet()]
attribute with a static list of values, such as[ValidateSet('MyValidValueA', 'MyValidValueB')]
As of v7.2.1, PowerShell doesn't support property getters that are called on each invocation - see GitHub issue #2219.
QUESTION
Automatic merging of Dependabot generated Pull Request with codeowners file and branch protection rule?
Asked 2022-Jan-20 at 09:46I have created Workflow for GitHub Actions as described here: https://docs.github.com/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/automating-dependabot-with-github-actions
1 name: Dependabot auto-approve
2 on: pull_request_target
3
4 permissions:
5 contents: write
6 pull-requests: write
7
8 jobs:
9 dependabot:
10 runs-on: ubuntu-latest
11 if: ${{ github.actor == 'dependabot[bot]' }}
12 steps:
13
14 - name: Approve a PR
15 run: gh pr review --approve "$PR_URL"
16 env:
17 PR_URL: ${{github.event.pull_request.html_url}}
18 GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
19
20 - name: Enable auto-merge for Dependabot PRs
21 run: gh pr merge --auto --merge "$PR_URL"
22 env:
23 PR_URL: ${{github.event.pull_request.html_url}}
24 # The documentation incorrectly forgets `GITHUB_TOKEN` here.
25 GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
26
Above automation works, but I have a Branch protection rule that requires review from the Code Owners.
Is there a way to include github-actions
to the CODEOWNERS file in order to make its approval counted?
ANSWER
Answered 2022-Jan-20 at 09:46As of right now, a GitHub app cannot be added to CODEOWNERS as quoted here.
Thank you for being here! Currently, GitHub Apps can’t be used in CODEOWNERS – that’s not supported. It’s something the team is considering for the future, and I’ll be sure to add your use case to the internal feature request.
However, what you can do, is to use a GitHub personal access token generated by yourself as explained in the documentation here, then add it as a secret and use it in your workflow. See the GitHub Documentation .
The last step of your action would then reference your self-defined secret. In the below example, I assume it's called MYTOKEN
1 name: Dependabot auto-approve
2 on: pull_request_target
3
4 permissions:
5 contents: write
6 pull-requests: write
7
8 jobs:
9 dependabot:
10 runs-on: ubuntu-latest
11 if: ${{ github.actor == 'dependabot[bot]' }}
12 steps:
13
14 - name: Approve a PR
15 run: gh pr review --approve "$PR_URL"
16 env:
17 PR_URL: ${{github.event.pull_request.html_url}}
18 GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
19
20 - name: Enable auto-merge for Dependabot PRs
21 run: gh pr merge --auto --merge "$PR_URL"
22 env:
23 PR_URL: ${{github.event.pull_request.html_url}}
24 # The documentation incorrectly forgets `GITHUB_TOKEN` here.
25 GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
26 - name: Enable auto-merge for Dependabot PRs
27 run: gh pr merge --auto --merge "$PR_URL"
28 env:
29 PR_URL: ${{github.event.pull_request.html_url}}
30 # The documentation incorrectly forgets `GITHUB_TOKEN` here.
31 GITHUB_TOKEN: ${{secrets.MYTOKEN}}
32
With this approach, a merge would be done as your user, who is - I assume - part of the CODEOWNERS.
QUESTION
Powershell package missing/not working on release
Asked 2022-Jan-14 at 21:41I have a console application project where i'm using the powershell SDK, it works perfectly fine in debug but on release, everything except powershell works.
The only settings i've found where it works is when releasing the project as framework dependent and portable. Or at least it works on my pc, on other computers it says the dotnet runtime is missing, even when installed via the link provided.
Using self contained, .net6-windows and win-x86 doesn't work. Not quite sure what could be wrong? I've tried cleaning the project, the solution, restarting visual studio and my PC. Everything works as expected in debug but when I publish, powershell just doesn't work.
1<Project Sdk="Microsoft.NET.Sdk.Worker">
2
3 <PropertyGroup>
4 <OutputType>Exe</OutputType>
5 <TargetFramework>net6.0-windows</TargetFramework>
6 <UseWindowsForms>true</UseWindowsForms>
7 <Nullable>enable</Nullable>
8 <ImplicitUsings>enable</ImplicitUsings>
9 <UserSecretsId>dotnet-SocketService-04A4D71F-C305-4A5B-BD0B-529C28B25DAD</UserSecretsId>
10 <PlatformTarget>AnyCPU</PlatformTarget>
11 <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
16 <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
17 <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.2.1" />
18 <PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
19 <PackageReference Include="System.Management" Version="6.0.0" />
20 <PackageReference Include="System.Management.Automation" Version="7.2.1" />
21 </ItemGroup>
22
23 <ItemGroup>
24 <Folder Include="Speedtest\" />
25 </ItemGroup>
26
27 <ItemGroup>
28 <None Update="Speedtest\speedtest.exe">
29 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
30 </None>
31 </ItemGroup>
32</Project>
33
EDIT:
I changed my powershell handler to use .EndInvoke(), now I finally get a proper error! I found an issue mentioning the error https://github.com/PowerShell/PowerShell/issues/7909 but installing Microsoft.Management.Infrastructure didn't resolve the issue, I installed version 2.0.0. If i try installing version 1 I get an error stating that the System.Management.Automation package requires a higher version (2.0.0)
1<Project Sdk="Microsoft.NET.Sdk.Worker">
2
3 <PropertyGroup>
4 <OutputType>Exe</OutputType>
5 <TargetFramework>net6.0-windows</TargetFramework>
6 <UseWindowsForms>true</UseWindowsForms>
7 <Nullable>enable</Nullable>
8 <ImplicitUsings>enable</ImplicitUsings>
9 <UserSecretsId>dotnet-SocketService-04A4D71F-C305-4A5B-BD0B-529C28B25DAD</UserSecretsId>
10 <PlatformTarget>AnyCPU</PlatformTarget>
11 <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
16 <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
17 <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.2.1" />
18 <PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
19 <PackageReference Include="System.Management" Version="6.0.0" />
20 <PackageReference Include="System.Management.Automation" Version="7.2.1" />
21 </ItemGroup>
22
23 <ItemGroup>
24 <Folder Include="Speedtest\" />
25 </ItemGroup>
26
27 <ItemGroup>
28 <None Update="Speedtest\speedtest.exe">
29 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
30 </None>
31 </ItemGroup>
32</Project>
33public static string CMD(string script)
34{
35 string errorMsg = "";
36 string output;
37
38
39 ps.AddScript(script);
40
41 //Make sure return values are outputted to the stream captured by C#
42 ps.AddCommand("Out-String");
43
44 PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();
45 ps.Streams.Error.DataAdded += (object sender, DataAddedEventArgs e) =>
46 { errorMsg = ((PSDataCollection<ErrorRecord>)sender)[e.Index].ToString(); };
47
48 IAsyncResult result = ps.BeginInvoke<PSObject, PSObject>(null, outputCollection);
49 ps.EndInvoke(result);
50
51 //while (!result.IsCompleted)
52 // Thread.Sleep(300);
53
54 StringBuilder stringBuilder = new StringBuilder();
55 foreach (PSObject outputItem in outputCollection)
56 {
57 stringBuilder.AppendLine(outputItem.BaseObject.ToString());
58 }
59 output = stringBuilder.ToString();
60
61 //Clears commands added to runspace
62 ps.Commands.Clear();
63
64 if (!string.IsNullOrEmpty(errorMsg))
65 return string.Empty;
66
67 return output.Trim();
68}
69
Here is the error message
1<Project Sdk="Microsoft.NET.Sdk.Worker">
2
3 <PropertyGroup>
4 <OutputType>Exe</OutputType>
5 <TargetFramework>net6.0-windows</TargetFramework>
6 <UseWindowsForms>true</UseWindowsForms>
7 <Nullable>enable</Nullable>
8 <ImplicitUsings>enable</ImplicitUsings>
9 <UserSecretsId>dotnet-SocketService-04A4D71F-C305-4A5B-BD0B-529C28B25DAD</UserSecretsId>
10 <PlatformTarget>AnyCPU</PlatformTarget>
11 <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
16 <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
17 <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.2.1" />
18 <PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
19 <PackageReference Include="System.Management" Version="6.0.0" />
20 <PackageReference Include="System.Management.Automation" Version="7.2.1" />
21 </ItemGroup>
22
23 <ItemGroup>
24 <Folder Include="Speedtest\" />
25 </ItemGroup>
26
27 <ItemGroup>
28 <None Update="Speedtest\speedtest.exe">
29 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
30 </None>
31 </ItemGroup>
32</Project>
33public static string CMD(string script)
34{
35 string errorMsg = "";
36 string output;
37
38
39 ps.AddScript(script);
40
41 //Make sure return values are outputted to the stream captured by C#
42 ps.AddCommand("Out-String");
43
44 PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();
45 ps.Streams.Error.DataAdded += (object sender, DataAddedEventArgs e) =>
46 { errorMsg = ((PSDataCollection<ErrorRecord>)sender)[e.Index].ToString(); };
47
48 IAsyncResult result = ps.BeginInvoke<PSObject, PSObject>(null, outputCollection);
49 ps.EndInvoke(result);
50
51 //while (!result.IsCompleted)
52 // Thread.Sleep(300);
53
54 StringBuilder stringBuilder = new StringBuilder();
55 foreach (PSObject outputItem in outputCollection)
56 {
57 stringBuilder.AppendLine(outputItem.BaseObject.ToString());
58 }
59 output = stringBuilder.ToString();
60
61 //Clears commands added to runspace
62 ps.Commands.Clear();
63
64 if (!string.IsNullOrEmpty(errorMsg))
65 return string.Empty;
66
67 return output.Trim();
68}
69Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Management.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Den angivne fil blev ikke fundet.
70File name: 'Microsoft.Management.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
71 at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
72 at System.Management.Automation.PowerShell.EndInvoke(IAsyncResult asyncResult)
73 at SocketService.PowerShellHandler.CMD(String script) in C:\Users\Blue\source\repos\SocketClientProject\Clientside\Handlers\PowershellHandler.cs:line 35
74 at SocketService.Classes.SystemInfo..ctor() in C:\Users\Blue\source\repos\SocketClientProject\Clientside\Classes\SystemInfo.cs:line 21
75 at SocketService.CommandHandler.Initialize() in C:\Users\Blue\source\repos\SocketClientProject\Clientside\Handlers\CommandHandler.cs:line 31
76 at SocketService.SocketService..ctor() in C:\Users\Blue\source\repos\SocketClientProject\Clientside\SocketService.cs:line 27
77 at SocketService.WindowsBackgroundService.StartAsync(CancellationToken cancellationToken) in C:\Users\Blue\source\repos\SocketClientProject\Clientside\WindowsBackgroundService.cs:line 17
78 at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
79 at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
80 at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
81 at Program.<Main>$(String[] args) in C:\Users\Blue\source\repos\SocketClientProject\Clientside\Program.cs:line 14
82 at Program.<Main>(String[] args)
83
84[process exited with code 3762504530]
85
Line 14 is me calling PowerShell.Create();
ANSWER
Answered 2022-Jan-14 at 20:16Without showing actual code and giving a more descriptive detailing about what's going on aside from "it doesn't work" it's difficult to say exactly what is occurring here but I'll do my best.
Thankfully, according to Microsoft's documentation you most certainly can run the Powershell SDK in a self-contained .Net application.
A self-contained .NET application can use Microsoft.PowerShell.SDK to run arbitrary PowerShell functionality without depending on any external PowerShell installations or libraries.
This leads me to believe that you may not be having an issue with the SDK itself but rather with the compiler.
Single-File deployments
I noticed in your screenshot that you are attempting to perform a single-file deployment. You could potentially be having a few issues here. One is to ensure that you're not using an incompatible API. If you are calling any of these within your application, that could be a factor:
- Assembly.CodeBase
- Assembly.EscapedCodeBase
- Assembly.GetFile
- Assembly.GetFiles
- Assembly.Location
- AssemblyName.CodeBase
- AssemblyName.EscapedCodeBase
- Module.FullyQualifiedName
- Module.Name
As none of these are compatible with single-file deployments.
Trimming
Another issue you may be experiencing is referred to as trimming. This is where the compiler will 'trim' unused assemblies from the project at compile time and tends to happen on release runs. While I believe this is off by default you can add the following to your .csproj file to ensure that trimming is disabled:
1<Project Sdk="Microsoft.NET.Sdk.Worker">
2
3 <PropertyGroup>
4 <OutputType>Exe</OutputType>
5 <TargetFramework>net6.0-windows</TargetFramework>
6 <UseWindowsForms>true</UseWindowsForms>
7 <Nullable>enable</Nullable>
8 <ImplicitUsings>enable</ImplicitUsings>
9 <UserSecretsId>dotnet-SocketService-04A4D71F-C305-4A5B-BD0B-529C28B25DAD</UserSecretsId>
10 <PlatformTarget>AnyCPU</PlatformTarget>
11 <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
12 </PropertyGroup>
13
14 <ItemGroup>
15 <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
16 <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
17 <PackageReference Include="Microsoft.PowerShell.SDK" Version="7.2.1" />
18 <PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
19 <PackageReference Include="System.Management" Version="6.0.0" />
20 <PackageReference Include="System.Management.Automation" Version="7.2.1" />
21 </ItemGroup>
22
23 <ItemGroup>
24 <Folder Include="Speedtest\" />
25 </ItemGroup>
26
27 <ItemGroup>
28 <None Update="Speedtest\speedtest.exe">
29 <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
30 </None>
31 </ItemGroup>
32</Project>
33public static string CMD(string script)
34{
35 string errorMsg = "";
36 string output;
37
38
39 ps.AddScript(script);
40
41 //Make sure return values are outputted to the stream captured by C#
42 ps.AddCommand("Out-String");
43
44 PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();
45 ps.Streams.Error.DataAdded += (object sender, DataAddedEventArgs e) =>
46 { errorMsg = ((PSDataCollection<ErrorRecord>)sender)[e.Index].ToString(); };
47
48 IAsyncResult result = ps.BeginInvoke<PSObject, PSObject>(null, outputCollection);
49 ps.EndInvoke(result);
50
51 //while (!result.IsCompleted)
52 // Thread.Sleep(300);
53
54 StringBuilder stringBuilder = new StringBuilder();
55 foreach (PSObject outputItem in outputCollection)
56 {
57 stringBuilder.AppendLine(outputItem.BaseObject.ToString());
58 }
59 output = stringBuilder.ToString();
60
61 //Clears commands added to runspace
62 ps.Commands.Clear();
63
64 if (!string.IsNullOrEmpty(errorMsg))
65 return string.Empty;
66
67 return output.Trim();
68}
69Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Management.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Den angivne fil blev ikke fundet.
70File name: 'Microsoft.Management.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
71 at System.Management.Automation.Runspaces.AsyncResult.EndInvoke()
72 at System.Management.Automation.PowerShell.EndInvoke(IAsyncResult asyncResult)
73 at SocketService.PowerShellHandler.CMD(String script) in C:\Users\Blue\source\repos\SocketClientProject\Clientside\Handlers\PowershellHandler.cs:line 35
74 at SocketService.Classes.SystemInfo..ctor() in C:\Users\Blue\source\repos\SocketClientProject\Clientside\Classes\SystemInfo.cs:line 21
75 at SocketService.CommandHandler.Initialize() in C:\Users\Blue\source\repos\SocketClientProject\Clientside\Handlers\CommandHandler.cs:line 31
76 at SocketService.SocketService..ctor() in C:\Users\Blue\source\repos\SocketClientProject\Clientside\SocketService.cs:line 27
77 at SocketService.WindowsBackgroundService.StartAsync(CancellationToken cancellationToken) in C:\Users\Blue\source\repos\SocketClientProject\Clientside\WindowsBackgroundService.cs:line 17
78 at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
79 at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
80 at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
81 at Program.<Main>$(String[] args) in C:\Users\Blue\source\repos\SocketClientProject\Clientside\Program.cs:line 14
82 at Program.<Main>(String[] args)
83
84[process exited with code 3762504530]
85<PropertyGroup>
86 <PublishTrimmed>false</PublishTrimmed>
87</PropertyGroup>
88
Optimizing
The JIT compiler tends to try to optimize code on release builds. When we run an application in debug mode the application is optimized for debugging the code. It tries to leave everything almost exactly as you wrote it with maybe some minor differences. When an application is run in release mode the actual code that is being run can be drastically different while maintianing the same logic. This is usually to try and make the final assembly as small and fast as possible. You can disable this optimization by the following steps:
- Right click on project
- Click "properties"
- Go to "Build"
- Under the section "general" deactivate "Optimize Code"
Other than the above mentioned possible causes I can't think of much more I can offer without seeing code, or error messages, or further details.
QUESTION
Has Variant behavior changed in Delphi 11?
Asked 2022-Jan-11 at 21:34In Delphi 10.3, I had written some Excel automation code. I used variants. When the routine was finished, I cleared and freeAndNil the Variant...
1 VarClear(arrData);
2 FreeAndNil(arrData);
3
This compiled and ran fine. I have just upgraded to D11, i.e. Alexandria. This code now gives an error. ... Incompatible Type: TObject and Variant.
I rewrote this portion of code to be:
1 VarClear(arrData);
2 FreeAndNil(arrData);
3 VarClear(arrData);
4 arrData.Free;
5
This compiles, and at first glance, seems to run fine. Is this the proper way to clear/dispose of variants in Alexandria?
ANSWER
Answered 2022-Jan-11 at 19:50Both of these code snippets are wrong. You don't call Free
on a variant. You call Free
on an object instance. Simply remove that line.
QUESTION
New-CimSession without elevation by providing admin credentials on Windows 10?
Asked 2021-Dec-31 at 13:43I need to query some WMI values using PowerShell from Windows 10 devices. The script is executed in the context of a non-admin user by some software distribution tooling.
There is a local admin account, and for the current purpose (retrieving information before wiping the system) it wouldn't be a problem to put the password in the script. As automation is a hard requirement, there is no way to deal with UAC windows or the user to enter some credentials.
Is there any way to get
1$sess = New-CimSession -Credential $admincred
2
to work without running into Access is denied
, because it isn't run in an elevated context? Can I somehow self-elevate it by just having the admin credentials?
[Edit]
The comments asked to provide more concrete information:
I want to onboard many unmanaged (i.e. no software distribution tool, no domain join) Windows 10 devices to Windows Autopilot.
The devices are not at a specific site.
The device vendor can't provide the information.
The users don't have administrative privileges
The users don't know the local admin password (I do)
Exposing the local admin password is less of a problem than the missing tech knowledge of the users (the password is considered legacy)
The firewall is preventing incoming traffic (no RDP, WinRM)
Code (Source):
$devDetail = (Get-CimInstance -CimSession $session -Namespace root/cimv2/mdm/dmmap -Class MDM_DevDetail_Ext01 -Filter "InstanceID='Ext' AND ParentID='./DevDetail'")
It is too time consuming to get the information using manual remote sessions with a tool like Teamviewer. Getting the users to download a tool from the intranet and running it would be a way to go. So I created a standalone application that builds and runs a customized PowerShell script. What won't work is getting it to run in an elevated session. I always end up with Access denied
.
ANSWER
Answered 2021-Dec-31 at 13:43Can I somehow self-elevate it by just having the admin credentials?
No you cannot. UAC is designed to prevent exactly what you are trying to do. Related Q&A:
- elevate without prompt - verb runas start-process
- UAC Getting in the Way of EXE Install Powershell
- Powershell provide credentials for RunAs
There may be many workarounds, but they all will have in common that you have to go to your machines (locally or remotely) at least once, gain administrative privileges and prepare something, e. g.:
- A scheduled task that runs under your local administrator account or under SYSTEM and triggers the execution of your script
- Disabling UAC (temporarily) (not recommended either way)
- Installing any remote management software, services or accounts (with extra run as background job privilege)
QUESTION
Diagnostic setting not included in Azure Portal ARM template export
Asked 2021-Dec-17 at 08:39I create a Diagnostic Settings for a KeyVault resource in Azure portal. DS properties are Metrics = AllMetrics and Destination is a predefined Log Analytics Workspace. When I do an export (Automation - Export Template) from Portal, nothing from the diagnostic setting is included in the generated ARM json. I've noticed the same behavior when resource is an App Service.
Is this by design? A bug? Any other way to get the ARM json for the diagnostic setting I've defined?
ANSWER
Answered 2021-Dec-17 at 08:39I tried the same in my environment and seems we cannot export the diagnostics settings for any service like key vault, app service , storage account etc
when we try to export the template for automation . But there are some sample Diagnostics settings Templates for few resources provided in Microsoft Documentation.
So , as per your settings it will something like below which I have tested by deploying :
1{
2 "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
3 "contentVersion": "1.0.0.0",
4 "parameters": {
5 "settingName": {
6 "type": "String",
7 "defaultValue": "testdsansuman"
8 },
9 "vaultName": {
10 "type": "String",
11 "defaultValue": "ansumantestkv1234"
12 },
13 "workspaceName": {
14 "type": "String",
15 "defaultValue": "ansumantestlog"
16 }
17 },
18 "resources": [
19 {
20 "type": "Microsoft.KeyVault/vaults/providers/diagnosticSettings",
21 "apiVersion": "2017-05-01-preview",
22 "name": "[concat(parameters('vaultName'), '/Microsoft.Insights/', parameters('settingName'))]",
23 "dependsOn": [],
24 "properties": {
25 "workspaceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('WorkspaceName'))]",
26
27 "metrics": [
28 {
29 "category": "AllMetrics",
30 "enabled": true
31 }
32 ]
33 }
34 }
35 ]
36 }
37
Community Discussions contain sources that include Stack Exchange Network
Tutorials and Learning Resources in Automation
Tutorials and Learning Resources are not available at this moment for Automation